답안 #757846

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
757846 2023-06-13T19:40:10 Z alexander707070 Simurgh (IOI17_simurgh) C++14
0 / 100
21 ms 4288 KB
#include<bits/stdc++.h>
#include "simurgh.h"
#define MAXN 507
#define MAXM 300007
using namespace std;

int n,m,a[MAXM],b[MAXM],res[MAXM];
vector< pair<int,int> > vv[MAXN];
bool li[MAXN];
vector<int> tree,ask,g[MAXN],ans;
int curr,where[MAXN],maxres;
bool golden[MAXM],checked[MAXM];

void dfs(int x){
	li[x]=true;
	for(int i=0;i<vv[x].size();i++){
		if(li[vv[x][i].first])continue;

		tree.push_back(vv[x][i].second);
		dfs(vv[x][i].first);
	}
}

void comp(int x,int p,int id){
	where[x]=id;
	for(int i=0;i<g[x].size();i++){
		if(g[x][i]==p)continue;
		comp(g[x][i],x,id);
	}
}

vector<int> find_roads(int N,vector<int> from,vector<int> to){
	n=N; m=int(from.size());

	for(int i=0;i<m;i++){
		a[i]=from[i]; b[i]=to[i];

		vv[a[i]].push_back({b[i],i});
		vv[b[i]].push_back({a[i],i});
	}

	dfs(0);
	
	for(int i=0;i<n-1;i++){
		for(int f=0;f<n;f++)g[f].clear();
		ask.clear();

		for(int f=0;f<n-1;f++){
			if(i==f)continue;

			ask.push_back(tree[f]);
			g[a[tree[f]]].push_back(b[tree[f]]);
			g[b[tree[f]]].push_back(a[tree[f]]);
		}

		comp(a[tree[i]],0,1);
		comp(b[tree[i]],0,2);

		maxres=0;
		for(int f=0;f<m;f++){
			res[f]=0;
			if(where[a[f]]!=where[b[f]]){
				ask.push_back(f);
				res[f]=count_common_roads(ask);
				maxres=max(maxres,res[f]);
				ask.pop_back();
			}
		}

		for(int f=0;f<m;f++){
			if(where[a[f]]!=where[b[f]] and res[f]==maxres){
				golden[f]=true;
			}
		}
	}

	for(int i=0;i<m;i++){
		if(golden[i]){
			ans.push_back(i);
		}
	}

	if(ans.size()!=n-1)cout<<1/0;

	return ans;
}

Compilation message

simurgh.cpp: In function 'void dfs(int)':
simurgh.cpp:16:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |  for(int i=0;i<vv[x].size();i++){
      |              ~^~~~~~~~~~~~~
simurgh.cpp: In function 'void comp(int, int, int)':
simurgh.cpp:26:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |  for(int i=0;i<g[x].size();i++){
      |              ~^~~~~~~~~~~~
simurgh.cpp: In function 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:83:15: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   83 |  if(ans.size()!=n-1)cout<<1/0;
      |     ~~~~~~~~~~^~~~~
simurgh.cpp:83:28: warning: division by zero [-Wdiv-by-zero]
   83 |  if(ans.size()!=n-1)cout<<1/0;
      |                           ~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB correct
2 Incorrect 1 ms 340 KB WA in grader: NO
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB correct
2 Incorrect 1 ms 340 KB WA in grader: NO
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB correct
2 Incorrect 1 ms 340 KB WA in grader: NO
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB correct
2 Correct 0 ms 340 KB correct
3 Incorrect 21 ms 4288 KB WA in grader: NO
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB correct
2 Incorrect 1 ms 340 KB WA in grader: NO
3 Halted 0 ms 0 KB -