Submission #898712

#TimeUsernameProblemLanguageResultExecution timeMemory
898712MuhammadSaramTropical Garden (IOI11_garden)C++17
49 / 100
418 ms262144 KiB
#include <bits/stdc++.h>
#include "gardenlib.h"

using namespace std;

void count_routes(int n, int m, int p, int G[][2], int q, int K[])
{
	vector<pair<int,int>> nei[n];
	vector<int> Ne[n];
	map<int,int[2]> dp[n][30];
	for (int i=0;i<m;i++)
	{
		nei[G[i][0]].push_back({i,G[i][1]});
		nei[G[i][1]].push_back({i,G[i][0]});
	}
	for (int i=0;i<n;i++)
	{
		if (nei[i].size()>1)
			for (int j=0;j<nei[i].size();j++)
			{
				dp[i][0][nei[i][j].first][0]=nei[i][!j].first;
				dp[i][0][nei[i][j].first][1]=nei[i][!j].second;
			}
		else
		{
			dp[i][0][nei[i][0].first][0]=nei[i][0].first;
			dp[i][0][nei[i][0].first][1]=nei[i][0].second;
		}
		dp[i][0][m][0]=nei[i][0].first;
		dp[i][0][m][1]=nei[i][0].second;
	}
	for (int i=0;i<n;i++)
	    nei[i].clear();
	for (int i=0;i<m;i++)
	{
		Ne[G[i][0]].push_back(i);
		Ne[G[i][1]].push_back(i);
	}
	for (int k=1;k<30;k++)
		for (int i=0;i<n;i++)
		{
			for (int j=0;j<Ne[i].size();j++)
			{
				dp[i][k][Ne[i][j]][0]=dp[dp[i][k-1][Ne[i][j]][1]][k-1][dp[i][k-1][Ne[i][j]][0]][0];
				dp[i][k][Ne[i][j]][1]=dp[dp[i][k-1][Ne[i][j]][1]][k-1][dp[i][k-1][Ne[i][j]][0]][1];
			}
			dp[i][k][m][0]=dp[dp[i][k-1][m][1]][k-1][dp[i][k-1][m][0]][0];
			dp[i][k][m][1]=dp[dp[i][k-1][m][1]][k-1][dp[i][k-1][m][0]][1];
		}
	for (int j=0;j<q;j++)
	{
		int ans=0,qu=K[j];
		for (int i=0;i<n;i++)
		{
			int u=i,ed=m;
			for (int k=29;k>=0;k--)
				if ((1<<k)&qu)
				{
					int x=dp[u][k][ed][1];
					ed=dp[u][k][ed][0];
					u=x;
				}
			if (u==p)
				ans++;
		}
		answer(ans);
	}
}

Compilation message (stderr)

garden.cpp: In function 'void count_routes(int, int, int, int (*)[2], int, int*)':
garden.cpp:19:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |    for (int j=0;j<nei[i].size();j++)
      |                 ~^~~~~~~~~~~~~~
garden.cpp:42:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   42 |    for (int j=0;j<Ne[i].size();j++)
      |                 ~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...