Submission #16663
Source Code Expand
#include"animals.h"
#include<set>
#include<cstdio>
#include<vector>
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
const int INF=1<<29;
int n,task_type;
vector<int> G[100000];
// subtask 2 用
int perm[100000]; // 頂点を整列する順列
set< pair<int,int> > S1,S2; // S1:[left, right], S2:[-width, left]
void init(int n,int E[][2]){
::n=n;
rep(i,n-1){
int u=E[i][0],v=E[i][1];
::G[u].push_back(v);
::G[v].push_back(u);
}
if(n<=1000) task_type=1;
else{
int deg[3]={};
rep(u,n){
int d=G[u].size();
if(d==1 || d==2) deg[d]++;
}
if(deg[1]==2 && deg[2]==n-2){
task_type=2;
}
else{
task_type=3;
}
}
if(task_type==2){ // 頂点を一列に並べ替える
int u0;
rep(u,n) if(G[u].size()==1) u0=u;
int pre=-1;
perm[u0]=0;
rep(t,n-1){
if(G[u0][0]==pre) u0=G[u0][1];
else u0=G[u0][0];
perm[u0]=t+1;
}
static vector<int> G2[100000];
rep(u,n) rep(i,G[u].size()) G2[perm[u]].push_back(perm[G[u][i]]);
rep(u,n) G[u]=G2[u];
S1.insert(make_pair(0,n-1));
S2.insert(make_pair(-n,0));
}
}
bool vis[1000];
int dfs(int u,int pre){
vis[u]=true;
int res=1;
rep(i,G[u].size()){
int v=G[u][i];
if(v!=pre) res+=dfs(v,u);
}
return res;
}
int query_subtask1(int v0){
G[v0].clear();
rep(u,n) rep(i,G[u].size()) {
int v=G[u][i];
if(v==v0){
G[u].erase(G[u].begin()+i);
break;
}
}
rep(u,n) vis[u]=false;
int res=0;
rep(u,n) if(!vis[u]) res=max(res,dfs(u,-1));
return res;
}
int query_subtask2(int v0){
v0=perm[v0];
set< pair<int,int> >::iterator it;
it=--S1.upper_bound(make_pair(v0,INF));
int l=it->first,r=it->second;
S1.erase(it);
S2.erase(make_pair(-(r-l+1),l));
if(l<v0) S1.insert(make_pair(l,v0-1)), S2.insert(make_pair(-(v0-l),l));
if(v0<r) S1.insert(make_pair(v0+1,r)), S2.insert(make_pair(-(r-v0),v0+1));
return -S2.begin()->first;
}
int query(int v0){
switch(task_type){
case 1: return query_subtask1(v0);
case 2: return query_subtask2(v0);
default: return -1; // very challenging problem!!
}
}
Submission Info
Compile Error
./grader.cpp: In function ‘int main()’:
./grader.cpp:15: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
./grader.cpp:17: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
./grader.cpp:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
Judge Result
Set Name |
Subtask1 |
Subtask2 |
Subtask3 |
Score / Max Score |
20 / 20 |
25 / 25 |
0 / 55 |
Status |
|
|
|
Set Name |
Test Cases |
Subtask1 |
subtask1/1, subtask1/10, subtask1/11, subtask1/12, subtask1/13, subtask1/14, subtask1/15, subtask1/16, subtask1/17, subtask1/18, subtask1/19, subtask1/2, subtask1/3, subtask1/4, subtask1/5, subtask1/6, subtask1/7, subtask1/8, subtask1/9 |
Subtask2 |
subtask2/1, subtask2/10, subtask2/11, subtask2/2, subtask2/3, subtask2/4, subtask2/5, subtask2/6, subtask2/7, subtask2/8, subtask2/9 |
Subtask3 |
subtask3/1, subtask3/10, subtask3/11, subtask3/12, subtask3/13, subtask3/14, subtask3/15, subtask3/16, subtask3/2, subtask3/3, subtask3/4, subtask3/5, subtask3/6, subtask3/7, subtask3/8, subtask3/9 |
Case Name |
Status |
Exec Time |
Memory |
subtask1/1 |
AC |
29 ms |
3352 KB |
subtask1/10 |
AC |
53 ms |
3436 KB |
subtask1/11 |
AC |
53 ms |
3420 KB |
subtask1/12 |
AC |
54 ms |
3304 KB |
subtask1/13 |
AC |
53 ms |
3336 KB |
subtask1/14 |
AC |
60 ms |
3372 KB |
subtask1/15 |
AC |
123 ms |
3404 KB |
subtask1/16 |
AC |
61 ms |
3276 KB |
subtask1/17 |
AC |
63 ms |
3412 KB |
subtask1/18 |
AC |
62 ms |
3372 KB |
subtask1/19 |
AC |
51 ms |
3400 KB |
subtask1/2 |
AC |
27 ms |
3368 KB |
subtask1/3 |
AC |
26 ms |
3368 KB |
subtask1/4 |
AC |
28 ms |
3368 KB |
subtask1/5 |
AC |
29 ms |
3232 KB |
subtask1/6 |
AC |
28 ms |
3304 KB |
subtask1/7 |
AC |
28 ms |
3316 KB |
subtask1/8 |
AC |
27 ms |
3364 KB |
subtask1/9 |
AC |
37 ms |
3412 KB |
subtask2/1 |
AC |
27 ms |
3364 KB |
subtask2/10 |
AC |
819 ms |
15768 KB |
subtask2/11 |
AC |
639 ms |
13604 KB |
subtask2/2 |
AC |
31 ms |
3412 KB |
subtask2/3 |
AC |
30 ms |
3340 KB |
subtask2/4 |
AC |
55 ms |
3412 KB |
subtask2/5 |
AC |
90 ms |
6712 KB |
subtask2/6 |
AC |
404 ms |
10792 KB |
subtask2/7 |
AC |
801 ms |
15768 KB |
subtask2/8 |
AC |
802 ms |
15792 KB |
subtask2/9 |
AC |
809 ms |
15656 KB |
subtask3/1 |
AC |
54 ms |
3412 KB |
subtask3/10 |
AC |
596 ms |
13640 KB |
subtask3/11 |
RE |
119 ms |
7340 KB |
subtask3/12 |
RE |
118 ms |
7332 KB |
subtask3/13 |
RE |
120 ms |
7340 KB |
subtask3/14 |
RE |
120 ms |
7340 KB |
subtask3/15 |
RE |
121 ms |
7336 KB |
subtask3/16 |
RE |
128 ms |
7260 KB |
subtask3/2 |
AC |
61 ms |
3248 KB |
subtask3/3 |
AC |
60 ms |
3312 KB |
subtask3/4 |
AC |
44 ms |
3368 KB |
subtask3/5 |
AC |
51 ms |
3420 KB |
subtask3/6 |
AC |
770 ms |
15644 KB |
subtask3/7 |
AC |
742 ms |
15772 KB |
subtask3/8 |
RE |
100 ms |
7712 KB |
subtask3/9 |
RE |
96 ms |
7704 KB |