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

Submission Time
Task A - むこのどうぶつたち と しんりんのはかい (Innocent Animals and Destruction of Forests)
User fura2
Language IOI-Style C++ (GCC 5.4.1)
Score 45
Code Size 2153 Byte
Status RE
Exec Time 819 ms
Memory 15792 KB

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
AC × 19
AC × 11
AC × 8
RE × 8
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