#include "split.h"
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#include<bits/stdc++.h>
#define rc(x) return cout<<x<<endl,0
#define pb push_back
#define mkp make_pair
#define in insert
#define er erase
#define fd find
#define fr first
#define sc second
typedef long long ll;
typedef long double ld;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll llinf=(1LL<<62);
const int inf=(1<<30);
const int nmax=1e5+50;
const int mod=1e9+7;
using namespace std;
int sz[nmax],pr[nmax],a[5],b[5],n,nd,c1,c2,i,m,x,y,ts,ss[nmax],p[nmax];
vector<int>g[nmax],rs;
bitset<nmax>viz;
vector<pair<int,int> >vc;
void dfs(int x,int p)
{
sz[x]=1;
pr[x]=p;
for(int i=0;i<g[x].size();i++)
{
int y=g[x][i];
if(y==p)continue;
dfs(y,x);
sz[x]+=sz[y];
}
for(int i=1;i<=3;i++)
{
for(int j=1;j<=3;j++)
{
if(i==j)continue;
if(a[i]<=sz[x] && sz[x]<=a[i]+a[j])
{
nd=x;
c1=i;
c2=6-i-j;
}
}
}
}
void col(int x,int c)
{
if(!a[c])return;
rs[x-1]=c;
a[c]--;
viz[x]=1;
for(int i=0;i<g[x].size();i++)
{
int y=g[x][i];
if(y==pr[x] || viz[y])continue;
col(y,c);
}
}
int fnd(int x)
{
if(p[x]==x)return x;
return p[x]=fnd(p[x]);
}
void uni(int x,int y)
{
if(fnd(x)!=fnd(y))
{
g[x].pb(y);
g[y].pb(x);
x=fnd(x),y=fnd(y);
if(ss[x]<ss[y])swap(x,y);
p[y]=x;
ss[x]+=ss[y];
}
}
vector<int> find_split(int N,int A,int B,int C,vector<int>P,vector<int>Q)
{
srand(time(0));
n=N,b[1]=A,b[2]=B,b[3]=C,m=(int)P.size();
for(i=0;i<m;i++)
{
P[i]++,Q[i]++;
vc.pb(mkp(P[i],Q[i]));
}
ts=2500;
nd=-1;
while(ts--)
{
for(i=1;i<=n;i++)
{
g[i].clear();
viz[i]=0;
p[i]=i;
ss[i]=1;
}
for(i=1;i<=3;i++)a[i]=b[i];
random_shuffle(vc.begin(),vc.end());
for(i=0;i<m;i++)
{
x=vc[i].fr,y=vc[i].sc;
uni(x,y);
}
rs.clear();
for(i=1;i<=n;i++)rs.pb(0);
dfs(1,0);
if(nd!=-1)
{
col(nd,c1);
col(1,c2);
for(i=0;i<n;i++)if(!rs[i])rs[i]=6-c1-c2;
break;
}
}
return rs;
}
Compilation message
split.cpp:3:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
#pragma GCC optimization("O3")
split.cpp:4:0: warning: ignoring #pragma GCC optimization [-Wunknown-pragmas]
#pragma GCC optimization("unroll-loops")
split.cpp: In function 'void dfs(int, int)':
split.cpp:30:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<g[x].size();i++)
~^~~~~~~~~~~~
split.cpp: In function 'void col(int, int)':
split.cpp:57:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i=0;i<g[x].size();i++)
~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
2680 KB |
ok, correct split |
2 |
Correct |
4 ms |
2680 KB |
ok, correct split |
3 |
Correct |
4 ms |
2680 KB |
ok, correct split |
4 |
Correct |
6 ms |
2680 KB |
ok, correct split |
5 |
Correct |
5 ms |
2680 KB |
ok, correct split |
6 |
Correct |
5 ms |
2684 KB |
ok, correct split |
7 |
Correct |
147 ms |
16624 KB |
ok, correct split |
8 |
Correct |
122 ms |
14828 KB |
ok, correct split |
9 |
Correct |
151 ms |
14188 KB |
ok, correct split |
10 |
Correct |
149 ms |
16364 KB |
ok, correct split |
11 |
Correct |
154 ms |
15340 KB |
ok, correct split |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
2684 KB |
ok, correct split |
2 |
Correct |
5 ms |
2680 KB |
ok, correct split |
3 |
Correct |
5 ms |
2680 KB |
ok, correct split |
4 |
Correct |
139 ms |
11880 KB |
ok, correct split |
5 |
Correct |
94 ms |
10732 KB |
ok, correct split |
6 |
Correct |
111 ms |
16428 KB |
ok, correct split |
7 |
Correct |
146 ms |
14700 KB |
ok, correct split |
8 |
Correct |
174 ms |
12884 KB |
ok, correct split |
9 |
Correct |
148 ms |
10720 KB |
ok, correct split |
10 |
Correct |
95 ms |
10988 KB |
ok, correct split |
11 |
Correct |
92 ms |
11244 KB |
ok, correct split |
12 |
Correct |
79 ms |
10988 KB |
ok, correct split |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
2680 KB |
ok, correct split |
2 |
Correct |
116 ms |
10796 KB |
ok, correct split |
3 |
Correct |
36 ms |
6000 KB |
ok, correct split |
4 |
Correct |
4 ms |
2680 KB |
ok, correct split |
5 |
Correct |
148 ms |
12780 KB |
ok, correct split |
6 |
Correct |
175 ms |
12652 KB |
ok, correct split |
7 |
Correct |
161 ms |
12524 KB |
ok, correct split |
8 |
Correct |
96 ms |
13420 KB |
ok, correct split |
9 |
Correct |
155 ms |
12268 KB |
ok, correct split |
10 |
Execution timed out |
2039 ms |
5488 KB |
Time limit exceeded |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4 ms |
2680 KB |
ok, correct split |
2 |
Correct |
5 ms |
2680 KB |
ok, no valid answer |
3 |
Correct |
4 ms |
2680 KB |
ok, correct split |
4 |
Correct |
4 ms |
2680 KB |
ok, correct split |
5 |
Correct |
4 ms |
2680 KB |
ok, correct split |
6 |
Correct |
4 ms |
2680 KB |
ok, correct split |
7 |
Correct |
4 ms |
2680 KB |
ok, correct split |
8 |
Correct |
4 ms |
2680 KB |
ok, correct split |
9 |
Correct |
6 ms |
2936 KB |
ok, correct split |
10 |
Correct |
6 ms |
2936 KB |
ok, correct split |
11 |
Correct |
4 ms |
2680 KB |
ok, correct split |
12 |
Incorrect |
986 ms |
2980 KB |
jury found a solution, contestant did not |
13 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
2680 KB |
ok, correct split |
2 |
Correct |
4 ms |
2680 KB |
ok, correct split |
3 |
Correct |
4 ms |
2680 KB |
ok, correct split |
4 |
Correct |
6 ms |
2680 KB |
ok, correct split |
5 |
Correct |
5 ms |
2680 KB |
ok, correct split |
6 |
Correct |
5 ms |
2684 KB |
ok, correct split |
7 |
Correct |
147 ms |
16624 KB |
ok, correct split |
8 |
Correct |
122 ms |
14828 KB |
ok, correct split |
9 |
Correct |
151 ms |
14188 KB |
ok, correct split |
10 |
Correct |
149 ms |
16364 KB |
ok, correct split |
11 |
Correct |
154 ms |
15340 KB |
ok, correct split |
12 |
Correct |
4 ms |
2684 KB |
ok, correct split |
13 |
Correct |
5 ms |
2680 KB |
ok, correct split |
14 |
Correct |
5 ms |
2680 KB |
ok, correct split |
15 |
Correct |
139 ms |
11880 KB |
ok, correct split |
16 |
Correct |
94 ms |
10732 KB |
ok, correct split |
17 |
Correct |
111 ms |
16428 KB |
ok, correct split |
18 |
Correct |
146 ms |
14700 KB |
ok, correct split |
19 |
Correct |
174 ms |
12884 KB |
ok, correct split |
20 |
Correct |
148 ms |
10720 KB |
ok, correct split |
21 |
Correct |
95 ms |
10988 KB |
ok, correct split |
22 |
Correct |
92 ms |
11244 KB |
ok, correct split |
23 |
Correct |
79 ms |
10988 KB |
ok, correct split |
24 |
Correct |
4 ms |
2680 KB |
ok, correct split |
25 |
Correct |
116 ms |
10796 KB |
ok, correct split |
26 |
Correct |
36 ms |
6000 KB |
ok, correct split |
27 |
Correct |
4 ms |
2680 KB |
ok, correct split |
28 |
Correct |
148 ms |
12780 KB |
ok, correct split |
29 |
Correct |
175 ms |
12652 KB |
ok, correct split |
30 |
Correct |
161 ms |
12524 KB |
ok, correct split |
31 |
Correct |
96 ms |
13420 KB |
ok, correct split |
32 |
Correct |
155 ms |
12268 KB |
ok, correct split |
33 |
Execution timed out |
2039 ms |
5488 KB |
Time limit exceeded |
34 |
Halted |
0 ms |
0 KB |
- |