Submission #64750

# Submission time Handle Problem Language Result Execution time Memory
64750 2018-08-05T14:13:38 Z TadijaSebez Tropical Garden (IOI11_garden) C++11
0 / 100
9 ms 7544 KB
#include "garden.h"
#include "gardenlib.h"
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define pb push_back
const int N=150050;
const int M=2*N;
int go[M],lo[N],dep[M];
vector<int> E[M];
void DFS(int u, int p)
{
	for(int i=0;i<E[u].size();i++)
	{
		int v=E[u][i];
		dep[v]=dep[u]+1;
		if(v!=p) DFS(v,p);
	}
}
pair<int,int> Qs[N];
int cnt[N],sol[N];
void count_routes(int n, int m, int p, int r[][2], int q, int k[])
{
	int i,j;
	for(i=0;i<q;i++) Qs[i].first=k[i],Qs[i].second=i;
	sort(Qs,Qs+q);
	for(i=0;i<n;i++) lo[i]=-1;
	for(i=0;i<n;i++) go[i]=-1;
	for(i=0;i<m;i++)
	{
		if(lo[r[i][0]<<1]==-1) lo[r[i][0]<<1]=i;
		else if(lo[r[i][0]<<1|1]==-1) lo[r[i][0]<<1|1]=i;
		if(lo[r[i][1]<<1]==-1) lo[r[i][1]<<1]=i;
		else if(lo[r[i][1]<<1|1]==-1) lo[r[i][1]<<1|1]=i;
	}
	for(i=0;i<n*2;i++)
	{
		int x=lo[i];
		if(lo[i]==-1) x=lo[i-1];
		int v=r[x][0];
		if(v==i/2) v=r[x][1];
		if(x==lo[v<<1]) go[i]=v<<1|1;
		else go[i]=v<<1;
	}
	for(i=0;i<2*n;i++)
	{
		E[go[i]].pb(i);
		dep[i]=-1;
	}
	dep[p<<1]=0;
	DFS(p<<1,p<<1);
	if(dep[p<<1])
	{
		for(i=0;i<2*n;i+=2) if(dep[i]!=-1) cnt[dep[i]]++;
		for(i=0;i<q;i++) sol[i]+=cnt[k[i]];
		for(i=0;i<2*n;i+=2) if(dep[i]!=-1) cnt[dep[i]]--;
	}
	else
	{
		int cyc=dep[p<<1];
		j=0;
		vector<int> Ds;
		for(i=0;i<2*n;i+=2) if(dep[i]!=-1) Ds.pb(dep[i]);
		sort(Ds.begin(),Ds.end());
		for(i=0;i<q;i++)
		{
			while(j<Ds.size() && Ds[j]<=Qs[i].first) cnt[Ds[j]%cyc]++,j++;
			sol[Qs[i].second]+=cnt[Qs[i].first%cyc];
		}
		for(i=0;i<cyc;i++) cnt[i]=0;
	}
	for(i=0;i<2*n;i++) dep[i]=-1;
	dep[p<<1|1]=0;
	DFS(p<<1|1,p<<1|1);
	if(dep[p<<1|1])
	{
		for(i=0;i<2*n;i+=2) if(dep[i]!=-1) cnt[dep[i]]++;
		for(i=0;i<q;i++) sol[i]+=cnt[k[i]];
		for(i=0;i<2*n;i+=2) if(dep[i]!=-1) cnt[dep[i]]--;
	}
	else
	{
		int cyc=dep[p<<1|1];
		j=0;
		vector<int> Ds;
		for(i=0;i<2*n;i+=2) if(dep[i]!=-1) Ds.pb(dep[i]);
		sort(Ds.begin(),Ds.end());
		for(i=0;i<q;i++)
		{
			while(j<Ds.size() && Ds[j]<=Qs[i].first) cnt[Ds[j]%cyc]++,j++;
			sol[Qs[i].second]+=cnt[Qs[i].first%cyc];
		}
		for(i=0;i<cyc;i++) cnt[i]=0;
	}
	for(i=0;i<q;i++) answer(sol[i]);
}

Compilation message

garden.cpp: In function 'void DFS(int, int)':
garden.cpp:14:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<E[u].size();i++)
              ~^~~~~~~~~~~~
garden.cpp: In function 'void count_routes(int, int, int, int (*)[2], int, int*)':
garden.cpp:68:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    while(j<Ds.size() && Ds[j]<=Qs[i].first) cnt[Ds[j]%cyc]++,j++;
          ~^~~~~~~~~~
garden.cpp:91:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    while(j<Ds.size() && Ds[j]<=Qs[i].first) cnt[Ds[j]%cyc]++,j++;
          ~^~~~~~~~~~
garden.cpp:71:27: warning: array subscript is below array bounds [-Warray-bounds]
   for(i=0;i<cyc;i++) cnt[i]=0;
                      ~~~~~^
garden.cpp:94:27: warning: array subscript is below array bounds [-Warray-bounds]
   for(i=0;i<cyc;i++) cnt[i]=0;
                      ~~~~~^
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 7544 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 7544 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 9 ms 7544 KB Output isn't correct
2 Halted 0 ms 0 KB -