#include "split.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
long long int map2[1000005][2],road2[100005],cnt=0,x1[100005],y1[100005],can=0,ans[100005],f[100005],s,e,stop,a[2],b[2],c[2],sum[100005],t[100005],n,m,road[100005],map[1000005][2],tag[100005];
int buildp(int x,int father)
{
tag[x]=1;
f[x]=father;
sum[x]=1;
int g=road[x];
while(g!=-1)
{
int now=map[g][0];
if(tag[now]==0)sum[x]+=buildp(now,x);
g=map[g][1];
}
cout<<x<<" "<<sum[x]<<endl;
return sum[x];
}
int color(int x,int col)
{
if(s==e)return 0;
s++;
ans[x]=col;
int g=road[x];
while(g!=-1)
{
if(s==e)return 0;
int now=map[g][0];
if(now!=f[x] && now!=stop)color(now,col);
g=map[g][1];
}
}
int find(int x,int father)
{
if(sum[x]>=a[0] && father>=b[0])
{
can=1;
stop=f[x];
s=0;
e=a[0];
color(x,a[1]);
stop=x;
s=0;
e=b[0];
color(0,b[1]);
return 0;
}
if(father>=a[0] && sum[x]>=b[0])
{
can=1;
stop=x;
s=0;
e=a[0];
color(0,a[1]);
stop=f[x];
s=0;
e=b[0];
color(x,b[1]);
return 0;
}
int g=road[x];
while(g!=-1)
{
int now=map[g][0];
if(now!=f[x])find(now,father+(sum[x]-sum[now]));
if(can==1)return 0;
g=map[g][1];
}
}
int dfs(int x)
{
int g=road2[x];
tag[x]=1;
while(g!=-1)
{
int now=map2[g][0];
if(tag[now]==0)
{
y1[cnt]=x;
x1[cnt]=now;
cnt++;
dfs(now);
}
g=map2[g][1];
}
return 0;
}
vector<int> find_split(int N, int A, int B, int C, vector<int> p, vector<int> q) {
a[0]=A;
a[1]=1;
b[0]=B;
b[1]=2;
c[0]=C;
c[1]=3;
if(b[0]<=a[0] && b[0]<=c[0])
{
swap(a[0],b[0]);
swap(a[1],b[1]);
}
if(c[0]<=b[0] && c[0]<=a[0])
{
swap(a[0],c[0]);
swap(a[1],c[1]);
}
if(c[0]<=b[0])
{
swap(b[0],c[0]);
swap(b[1],c[1]);
}
n=N;
m=q.size();
for(int i=0;i<=n;i++)road2[i]=-1;
for(int i=0;i<m;i++)
{
map2[i*2][0]=p[i];
map2[i*2][1]=road2[q[i]];
road2[q[i]]=i*2;
map2[i*2+1][0]=q[i];
map2[i*2+1][1]=road2[p[i]];
road2[p[i]]=i*2+1;
}
int qw=0;
while(qw<n)
{
cnt=0;
dfs(qw);
for(int i=0;i<=n;i++)
{
road[i]=-1;
tag[i]=0;
}
for(int i=0;i<cnt;i++)
{
map[i*2][0]=x1[i];
map[i*2][1]=road[y1[i]];
road[y1[i]]=i*2;
map[i*2+1][0]=y1[i];
map[i*2+1][1]=road[x1[i]];
road[x1[i]]=i*2+1;
}
can=0;
buildp(0,-1);
find(0,0);
if(can==1)
{
vector<int> res(n);
for(int i=0;i<n;i++)
{
res[i]=ans[i];
if(res[i]==0)res[i]=c[1];
}
return res;
}
qw++;
}
vector<int> res(n);
}
Compilation message
split.cpp: In function 'int color(int, int)':
split.cpp:36:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
split.cpp: In function 'int find(int, int)':
split.cpp:73:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:163:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
376 KB |
secret mismatch |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
376 KB |
secret mismatch |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
376 KB |
secret mismatch |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
380 KB |
secret mismatch |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
2 ms |
376 KB |
secret mismatch |
2 |
Halted |
0 ms |
0 KB |
- |