Submission #1411763
Source Code Expand
#include<stdio.h> #include<vector> #include<algorithm> #include<queue> using namespace std; #define SIZE 500 #define INF 1000000 typedef pair<int, int>pii; class maxflow { public: vector<int>pat[SIZE]; vector<int>cap[SIZE]; vector<int>rev[SIZE]; bool flag[SIZE]; int dist[SIZE]; int now[SIZE], ind[SIZE]; int idx[SIZE]; int flow; int gd; void adde(int s, int t, int cp)//多重辺は消してから s->tの容量cpの辺をはる { pat[s].push_back(t); pat[t].push_back(s); cap[s].push_back(cp); cap[t].push_back(0); rev[s].push_back(pat[t].size() - 1); rev[t].push_back(pat[s].size() - 1); } void blockflow(int node, int len, int go, int pt)//ブロックフローを求めて流す { if (pt == len) { if (node != go)return; int mini = INF, rr = -1; for (int i = 0; i < pt; i++)if (cap[now[i]][ind[i]] < mini)mini = cap[now[i]][ind[i]], rr = i; for (int i = 0; i < pt; i++)cap[now[i]][ind[i]] -= mini, cap[pat[now[i]][ind[i]]][rev[now[i]][ind[i]]] += mini; flow += mini;//mini==INFになったら非有界 gd = rr; return; } now[pt] = node; for (int i = idx[node]; i < pat[node].size(); i++) { if (dist[pat[node][i]] == dist[node] + 1 && cap[node][i]>0) { ind[pt] = i; blockflow(pat[node][i], len, go, pt + 1); if (gd < pt)break; else gd = INF; } idx[node]++; } } void dinic(int st, int go, int num)//dinicのアルゴリズムで最大流を求める 変数flowにmaxflowの値が入る { flow = 0; for (;;) { queue<pii>que; fill(dist, dist + num, INF); fill(flag, flag + num, false); que.push(make_pair(st, 0)); for (;;) { if (que.empty())break; pii z = que.front(); que.pop(); if (flag[z.first])continue; flag[z.first] = true; dist[z.first] = z.second; for (int i = 0; i < pat[z.first].size(); i++) { if (dist[pat[z.first][i]]>z.second + 1 && cap[z.first][i] > 0) { dist[pat[z.first][i]] = z.second + 1; que.push(make_pair(pat[z.first][i], z.second + 1)); } } } if (dist[go] == INF)return; gd = INF; fill(idx, idx + SIZE, 0); blockflow(st, dist[go], go, 0); } } vector<int>getcut(int st, int go, int num)//頂点iがmincutのst側なら1 そうでなければ0 { dinic(st, go, num); vector<int>ret; for (int i = 0; i < num; i++)ret.push_back(flag[i]); return ret; } }; maxflow fl; class unionfind { public: int par[SIZE]; int ran[SIZE]; int ren[SIZE]; void init() { for (int i = 0; i<SIZE; i++) { par[i] = i; ran[i] = 0; ren[i] = 1; } } int find(int a) { if (a == par[a])return a; else return par[a] = find(par[a]); } void unite(int a, int b) { a = find(a); b = find(b); if (a == b)return; if (ran[a]>ran[b]) { par[b] = a; ren[a] += ren[b]; } else { par[a] = b; ren[b] += ren[a]; } if (ran[a] == ran[b])ran[b]++; } }; unionfind uf; int odeg[500], ideg[500]; bool flag[500]; void no() { printf("NO\n"); exit(0); } int main() { int num, hei; scanf("%d%d", &num, &hei); uf.init(); for (int i = 0; i < num; i++) { int za, zb, zc, zd; scanf("%d%d%d%d", &za, &zb, &zc, &zd); int s, t; if (zc == 0)s = za * 2; else s = zc * 2 + 1; if (zd == 0)t = zb * 2 + 1; else t = zd * 2; fl.adde(s, t, 1); uf.unite(s, t); odeg[s]++, ideg[t]++; } int sum = 0; for (int i = 1; i <= hei; i++) { if (odeg[i * 2] < ideg[i * 2])no(); else if (odeg[i * 2] > ideg[i * 2])fl.adde(0, i * 2, odeg[i * 2] - ideg[i * 2]), sum += odeg[i * 2] - ideg[i * 2], flag[uf.find(i * 2)] = true; if (odeg[i * 2 + 1]>ideg[i * 2 + 1])no(); else if (odeg[i * 2 + 1] < ideg[i * 2 + 1])fl.adde(i * 2 + 1, 1, ideg[i * 2 + 1] - odeg[i * 2 + 1]); } for (int i = 2; i <= hei * 2 + 1; i++) { if (i == uf.find(i)) { if ((!flag[i]) && ideg[i] > 0)no(); } } fl.dinic(0, 1, hei * 2 + 2); if (sum != fl.flow)no(); printf("YES\n"); }
Submission Info
Submission Time | |
---|---|
Task | E - Jigsaw |
User | DEGwer |
Language | C++14 (GCC 5.4.1) |
Score | 1200 |
Code Size | 4081 Byte |
Status | AC |
Exec Time | 41 ms |
Memory | 4608 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:145:27: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d%d", &num, &hei); ^ ./Main.cpp:150:40: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d%d%d%d", &za, &zb, &zc, &zd); ^
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1200 / 1200 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample1.txt, sample2.txt, sample3.txt |
All | sample1.txt, sample2.txt, sample3.txt, a1.txt, a2.txt, a3.txt, b1.txt, b10.txt, b101.txt, b102.txt, b103.txt, b104.txt, b105.txt, b106.txt, b107.txt, b108.txt, b109.txt, b11.txt, b110.txt, b111.txt, b112.txt, b113.txt, b114.txt, b115.txt, b116.txt, b117.txt, b118.txt, b119.txt, b12.txt, b13.txt, b14.txt, b15.txt, b2.txt, b200.txt, b201.txt, b202.txt, b203.txt, b204.txt, b205.txt, b206.txt, b207.txt, b208.txt, b209.txt, b210.txt, b211.txt, b212.txt, b213.txt, b214.txt, b215.txt, b216.txt, b217.txt, b218.txt, b219.txt, b3.txt, b300.txt, b301.txt, b302.txt, b303.txt, b304.txt, b305.txt, b306.txt, b307.txt, b308.txt, b309.txt, b310.txt, b311.txt, b4.txt, b5.txt, b6.txt, b7.txt, b8.txt, b9.txt, c1.txt, c2.txt, c3.txt, c4.txt, c5.txt, d1.txt, d2.txt, d3.txt, d4.txt, sample1.txt, sample2.txt, sample3.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
a1.txt | AC | 1 ms | 256 KB |
a2.txt | AC | 5 ms | 640 KB |
a3.txt | AC | 34 ms | 3840 KB |
b1.txt | AC | 1 ms | 256 KB |
b10.txt | AC | 8 ms | 1024 KB |
b101.txt | AC | 36 ms | 3968 KB |
b102.txt | AC | 35 ms | 4096 KB |
b103.txt | AC | 36 ms | 3840 KB |
b104.txt | AC | 36 ms | 4096 KB |
b105.txt | AC | 35 ms | 3968 KB |
b106.txt | AC | 16 ms | 1664 KB |
b107.txt | AC | 32 ms | 3456 KB |
b108.txt | AC | 36 ms | 3968 KB |
b109.txt | AC | 31 ms | 3584 KB |
b11.txt | AC | 24 ms | 2944 KB |
b110.txt | AC | 36 ms | 4096 KB |
b111.txt | AC | 35 ms | 4352 KB |
b112.txt | AC | 36 ms | 3968 KB |
b113.txt | AC | 36 ms | 4096 KB |
b114.txt | AC | 35 ms | 3968 KB |
b115.txt | AC | 16 ms | 1792 KB |
b116.txt | AC | 32 ms | 2944 KB |
b117.txt | AC | 35 ms | 3968 KB |
b118.txt | AC | 27 ms | 3072 KB |
b119.txt | AC | 31 ms | 3328 KB |
b12.txt | AC | 24 ms | 2560 KB |
b13.txt | AC | 36 ms | 3968 KB |
b14.txt | AC | 37 ms | 4096 KB |
b15.txt | AC | 36 ms | 3968 KB |
b2.txt | AC | 5 ms | 640 KB |
b200.txt | AC | 34 ms | 3840 KB |
b201.txt | AC | 34 ms | 3840 KB |
b202.txt | AC | 35 ms | 3840 KB |
b203.txt | AC | 34 ms | 3840 KB |
b204.txt | AC | 36 ms | 3968 KB |
b205.txt | AC | 37 ms | 4096 KB |
b206.txt | AC | 35 ms | 4224 KB |
b207.txt | AC | 34 ms | 4224 KB |
b208.txt | AC | 38 ms | 4224 KB |
b209.txt | AC | 34 ms | 4096 KB |
b210.txt | AC | 34 ms | 3840 KB |
b211.txt | AC | 36 ms | 3840 KB |
b212.txt | AC | 34 ms | 3840 KB |
b213.txt | AC | 36 ms | 3840 KB |
b214.txt | AC | 37 ms | 3968 KB |
b215.txt | AC | 34 ms | 4096 KB |
b216.txt | AC | 37 ms | 4224 KB |
b217.txt | AC | 37 ms | 4224 KB |
b218.txt | AC | 35 ms | 4224 KB |
b219.txt | AC | 38 ms | 4096 KB |
b3.txt | AC | 35 ms | 4608 KB |
b300.txt | AC | 41 ms | 3712 KB |
b301.txt | AC | 33 ms | 3712 KB |
b302.txt | AC | 26 ms | 2544 KB |
b303.txt | AC | 26 ms | 2672 KB |
b304.txt | AC | 40 ms | 3712 KB |
b305.txt | AC | 33 ms | 3712 KB |
b306.txt | AC | 23 ms | 2796 KB |
b307.txt | AC | 26 ms | 2672 KB |
b308.txt | AC | 35 ms | 3712 KB |
b309.txt | AC | 41 ms | 3712 KB |
b310.txt | AC | 33 ms | 3560 KB |
b311.txt | AC | 34 ms | 3440 KB |
b4.txt | AC | 36 ms | 4480 KB |
b5.txt | AC | 5 ms | 640 KB |
b6.txt | AC | 5 ms | 640 KB |
b7.txt | AC | 5 ms | 640 KB |
b8.txt | AC | 5 ms | 640 KB |
b9.txt | AC | 5 ms | 640 KB |
c1.txt | AC | 28 ms | 3436 KB |
c2.txt | AC | 28 ms | 3116 KB |
c3.txt | AC | 26 ms | 2464 KB |
c4.txt | AC | 28 ms | 3564 KB |
c5.txt | AC | 17 ms | 2036 KB |
d1.txt | AC | 35 ms | 3968 KB |
d2.txt | AC | 35 ms | 3840 KB |
d3.txt | AC | 35 ms | 3712 KB |
d4.txt | AC | 28 ms | 3072 KB |
sample1.txt | AC | 1 ms | 256 KB |
sample2.txt | AC | 1 ms | 256 KB |
sample3.txt | AC | 1 ms | 256 KB |