1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
| --- utpc2010_10125(aizu2207)_stack.cpp 2016-10-13 04:19:40.000000000 +0900
+++ atcodercodefestival2016qualaD.cpp 2016-10-13 04:42:46.000000000 +0900
@@ -1,22 +1,22 @@
-#include <string>
#include <cstdio>
#include <unordered_map>
#include <deque>
#include <algorithm>
using namespace std;
-typedef string key;
+typedef int key;
-char b1[99],b2[99];
-void main2(int n){
+int main(){
+ int r,c,n;
+ scanf("%d%d%d",&r,&c,&n);
unordered_map<key,deque<pair<key,long long>>>m;
for(;n;n--){
- int d;
- scanf(" 1 %s = 10^%d %s",b1,&d,b2);
- string s1=b1,s2=b2;
- m[s1].emplace_back(s2,d);
- m[s2].emplace_back(s1,-d);
+ int s1,s2,d;
+ scanf("%d%d%d",&s1,&s2,&d);
+ m[s1].emplace_back(s2+r,d);
+ m[s2+r].emplace_back(s1,-d);
}
for(;!m.empty();){
+ long long a=-1LL<<61,b=1LL<<61;
auto s=m.begin()->first;
deque<pair<key,long long>>st={ {s,0} };
unordered_map<key,long long>memo={ {s,0} };
@@ -29,12 +29,17 @@
memo[e.first]=d+e.second;
}else if(memo[e.first]!=d+e.second){
puts("No");
- return;
+ return 0;
}
}
+ if(cur<=r)a=max(a,d);
+ else b=min(b,d);
}
+ if(a>b){
+ puts("No");
+ return 0;
+ }
for(auto &e:memo)m.erase(m.find(e.first));
}
puts("Yes");
}
-int main(){int n;for(;~scanf("%d",&n)&&n;)main2(n);}
|