Submission #1411389
Source Code Expand
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
#include <set>
#include <map>
#include <functional>
#include <cmath>
#include <string>
#define SIZE 200005
#define INF 1000000000
using namespace std;
typedef long long int ll;
typedef pair <int,int> P;
struct MaxFlow
{
struct edge
{
int to,cap,rev;
edge(int to=0,int cap=0,int rev=0):to(to),cap(cap),rev(rev){}
};
vector <edge> vec[SIZE];
int level[SIZE];
int iter[SIZE];
int N;
void init(int X)
{
N=X;
}
void add(int s,int t,int c)
{
int S=vec[s].size(),T=vec[t].size();
vec[s].push_back(edge(t,c,T));
vec[t].push_back(edge(s,0,S));
}
void bfs(int s)
{
memset(level,-1,sizeof(level));
queue <int> que;
level[s] = 0;
que.push(s);
while (!que.empty())
{
int v = que.front();que.pop();
for(int i=0;i<vec[v].size();i++)
{
edge&e=vec[v][i];
if (e.cap>0&&level[e.to]<0)
{
level[e.to]=level[v]+1;
que.push(e.to);
}
}
}
}
int flow_dfs(int v,int t,int f)
{
if (v==t) return f;
for(int &i=iter[v];i<vec[v].size();i++)
{
edge &e=vec[v][i];
if (e.cap>0&&level[v]<level[e.to])
{
int d=flow_dfs(e.to,t,min(f,e.cap));
if(d>0)
{
e.cap-=d;
vec[e.to][e.rev].cap+=d;
return d;
}
}
}
return 0;
}
int max_flow(int s,int t)
{
int flow = 0;
while(1)
{
bfs(s);
if (level[t]<0) return flow;
for(int i=0;i<N;i++) iter[i]=0;
while (1)
{
int f=flow_dfs(s,t,INF);
if(f==0) break;
flow += f;
}
}
}
};
MaxFlow MT;
struct UF
{
int par[SIZE],rank[SIZE];
void init(int n)
{
for(int i=0;i<n;i++)
{
par[i]=i;
rank[i]=1;
}
}
int find(int x)
{
if(x==par[x]) return x;
return par[x]=find(par[x]);
}
void unite(int x,int y)
{
x=find(x);
y=find(y);
if(x==y) return;
if(rank[x]<rank[y])
{
par[x]=y;
}
else
{
par[y]=x;
if(rank[x]==rank[y]) rank[x]++;
}
}
bool same(int x,int y)
{
return find(x)==find(y);
}
};
UF uf;
vector <int> vec[SIZE];
int A[SIZE],B[SIZE],C[SIZE],D[SIZE];
int out[SIZE],in[SIZE];
int main()
{
int n,H;
scanf("%d %d",&n,&H);
for(int i=0;i<n;i++)
{
scanf("%d %d %d %d",&A[i],&B[i],&C[i],&D[i]);
if(C[i]==0) C[i]=1;
else
{
A[i]=C[i];
C[i]=0;
}
if(D[i]==0) D[i]=0;
else
{
B[i]=D[i];
D[i]=1;
}
}
vector <P> vx;
for(int i=0;i<n;i++)
{
vx.push_back(P(A[i],C[i]));
vx.push_back(P(B[i],D[i]));
}
sort(vx.begin(),vx.end());
vx.erase(unique(vx.begin(),vx.end()),vx.end());
uf.init(vx.size()+2);
for(int i=0;i<n;i++)
{
int L=lower_bound(vx.begin(),vx.end(),P(A[i],C[i]))-vx.begin();
int R=lower_bound(vx.begin(),vx.end(),P(B[i],D[i]))-vx.begin();
out[L]++,in[R]++;
uf.unite(L,R);
}
for(int i=0;i<vx.size();i++)
{
if(uf.find(i)==i)
{
vector <int> nd;
for(int j=0;j<vx.size();j++)
{
if(uf.same(i,j))
{
nd.push_back(j);
}
}
int a=0,b=0;
for(int j=0;j<nd.size();j++)
{
int v=nd[j];
if(in[v]==out[v]) continue;
if(in[v]<out[v])
{
if(vx[v].second==0)
{
puts("NO");
return 0;
}
a+=out[v]-in[v];
}
else
{
if(vx[v].second==1)
{
puts("NO");
return 0;
}
b+=in[v]-out[v];
}
}
if(a!=b||a==0)
{
puts("NO");
return 0;
}
}
}
MT.init(vx.size()+5);
int S=vx.size(),T=S+1;
int cnt=0;
for(int i=0;i<vx.size();i++)
{
if(in[i]<out[i])
{
MT.add(S,i,out[i]-in[i]);
cnt+=out[i]-in[i];
}
else if(out[i]<in[i])
{
MT.add(i,T,in[i]-out[i]);
}
}
for(int i=0;i<n;i++)
{
int L=lower_bound(vx.begin(),vx.end(),P(A[i],C[i]))-vx.begin();
int R=lower_bound(vx.begin(),vx.end(),P(B[i],D[i]))-vx.begin();
MT.add(L,R,1);
}
bool up=MT.max_flow(S,T)==cnt;
if(up) puts("YES");
else puts("NO");
return 0;
}
Submission Info
Submission Time |
|
Task |
E - Jigsaw |
User |
yutaka1999 |
Language |
C++14 (GCC 5.4.1) |
Score |
1200 |
Code Size |
4091 Byte |
Status |
AC |
Exec Time |
76 ms |
Memory |
21232 KB |
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:143:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d",&n,&H);
^
./Main.cpp:146:47: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d %d",&A[i],&B[i],&C[i],&D[i]);
^
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 |
5 ms |
14592 KB |
a2.txt |
AC |
10 ms |
14976 KB |
a3.txt |
AC |
55 ms |
17140 KB |
b1.txt |
AC |
5 ms |
14592 KB |
b10.txt |
AC |
19 ms |
15864 KB |
b101.txt |
AC |
73 ms |
20208 KB |
b102.txt |
AC |
56 ms |
17140 KB |
b103.txt |
AC |
71 ms |
20080 KB |
b104.txt |
AC |
71 ms |
20464 KB |
b105.txt |
AC |
56 ms |
17140 KB |
b106.txt |
AC |
27 ms |
15864 KB |
b107.txt |
AC |
66 ms |
19440 KB |
b108.txt |
AC |
71 ms |
19952 KB |
b109.txt |
AC |
50 ms |
17140 KB |
b11.txt |
AC |
49 ms |
18548 KB |
b110.txt |
AC |
72 ms |
20080 KB |
b111.txt |
AC |
56 ms |
17140 KB |
b112.txt |
AC |
72 ms |
19952 KB |
b113.txt |
AC |
71 ms |
20208 KB |
b114.txt |
AC |
56 ms |
17140 KB |
b115.txt |
AC |
27 ms |
15864 KB |
b116.txt |
AC |
65 ms |
19056 KB |
b117.txt |
AC |
71 ms |
19952 KB |
b118.txt |
AC |
44 ms |
17012 KB |
b119.txt |
AC |
51 ms |
17268 KB |
b12.txt |
AC |
41 ms |
17012 KB |
b13.txt |
AC |
74 ms |
19952 KB |
b14.txt |
AC |
75 ms |
20080 KB |
b15.txt |
AC |
74 ms |
20336 KB |
b2.txt |
AC |
12 ms |
15228 KB |
b200.txt |
AC |
55 ms |
17140 KB |
b201.txt |
AC |
55 ms |
17140 KB |
b202.txt |
AC |
55 ms |
17140 KB |
b203.txt |
AC |
55 ms |
17140 KB |
b204.txt |
AC |
73 ms |
20336 KB |
b205.txt |
AC |
73 ms |
20336 KB |
b206.txt |
AC |
55 ms |
17140 KB |
b207.txt |
AC |
55 ms |
17140 KB |
b208.txt |
AC |
73 ms |
20464 KB |
b209.txt |
AC |
56 ms |
17140 KB |
b210.txt |
AC |
55 ms |
17140 KB |
b211.txt |
AC |
73 ms |
20208 KB |
b212.txt |
AC |
55 ms |
17140 KB |
b213.txt |
AC |
73 ms |
19952 KB |
b214.txt |
AC |
73 ms |
20080 KB |
b215.txt |
AC |
55 ms |
17140 KB |
b216.txt |
AC |
73 ms |
20208 KB |
b217.txt |
AC |
74 ms |
20464 KB |
b218.txt |
AC |
55 ms |
17140 KB |
b219.txt |
AC |
76 ms |
20208 KB |
b3.txt |
AC |
56 ms |
17140 KB |
b300.txt |
AC |
75 ms |
20080 KB |
b301.txt |
AC |
54 ms |
17140 KB |
b302.txt |
AC |
41 ms |
18800 KB |
b303.txt |
AC |
41 ms |
18800 KB |
b304.txt |
AC |
73 ms |
19952 KB |
b305.txt |
AC |
54 ms |
17140 KB |
b306.txt |
AC |
35 ms |
17140 KB |
b307.txt |
AC |
41 ms |
18928 KB |
b308.txt |
AC |
66 ms |
19696 KB |
b309.txt |
AC |
75 ms |
19952 KB |
b310.txt |
AC |
55 ms |
20720 KB |
b311.txt |
AC |
52 ms |
21232 KB |
b4.txt |
AC |
70 ms |
20720 KB |
b5.txt |
AC |
10 ms |
14976 KB |
b6.txt |
AC |
10 ms |
14976 KB |
b7.txt |
AC |
10 ms |
14976 KB |
b8.txt |
AC |
10 ms |
14976 KB |
b9.txt |
AC |
10 ms |
14976 KB |
c1.txt |
AC |
40 ms |
17140 KB |
c2.txt |
AC |
41 ms |
17140 KB |
c3.txt |
AC |
42 ms |
18672 KB |
c4.txt |
AC |
40 ms |
17140 KB |
c5.txt |
AC |
29 ms |
18036 KB |
d1.txt |
AC |
67 ms |
20080 KB |
d2.txt |
AC |
68 ms |
20080 KB |
d3.txt |
AC |
68 ms |
20080 KB |
d4.txt |
AC |
54 ms |
18800 KB |
sample1.txt |
AC |
5 ms |
14592 KB |
sample2.txt |
AC |
5 ms |
14592 KB |
sample3.txt |
AC |
5 ms |
14592 KB |