답안 #72682

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
72682 2018-08-26T14:15:27 Z mhnd Simurgh (IOI17_simurgh) C++17
0 / 100
3 ms 560 KB
#include "simurgh.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
const int N = 2e5+50;
const int oo = 1e9;
const int mod = 1e9+7;

vector<pair<int,int>> g[510];
bool taken[510],used[N];

vector<int> find_roads(int n, vector<int> U, vector<int> V) {
	for(int i=0;i<(int)U.size();i++){
		g[U[i]].push_back({V[i],i});
		g[V[i]].push_back({U[i],i});
	}
	vector<int> ans;
	for(int i=0;i<n;i++){
		for(int j=0;j<g[i].size();j++){
			int v = g[i][j].first;
			int w = g[i][j].second;
			if(taken[i] && taken[v])continue;
			taken[i]=taken[v]=1;
			used[w]=1;
			ans.push_back(w);
		}
	}
	int lst = count_common_roads(ans);
	for(int i=0;i<ans.size();i++){
		int cur = 0;
		taken[U[ans[i]]]=taken[V[ans[i]]]=0;
		//for(int i=0;i<n;i++)cout << taken[i] << ' ';
		//puts("");
		bool f=0;
		for(int j=g[U[ans[i]]].size()-1;j>=0;j--){
			int v = g[U[ans[i]]][j].first;
			int u = U[ans[i]];
			if((taken[u] && taken[v]) || used[g[U[ans[i]]][j].second])continue;
			//cout << 1 << ' ' << u << ' ' << v << endl;
			int tmp = ans[i];
			ans[i] = g[U[ans[i]]][j].second;
			cur = count_common_roads(ans);
			if(cur > lst){
				taken[v]=taken[u]=1;
				used[ans[i]]=1;
				f=1;
				lst = cur;
				break;
			}
			ans[i] = tmp;
		}
		if(f)continue;
		for(int j=g[V[ans[i]]].size()-1;j>=0;j--){
			int v = g[V[ans[i]]][j].first;
			int u = V[ans[i]];
			if((taken[u] && taken[v]) || g[V[ans[i]]][j].second == i)continue;
			//cout << 2 << ' ' << u << ' ' << v << endl;
			int tmp = ans[i];
			ans[i] = g[V[ans[i]]][j].second;
			//if(i==ans.size()-1)cout << ans[i] << endl;
			cur = count_common_roads(ans);
			if(cur > lst){
				taken[v]=taken[u]=1;
				used[ans[i]]=1;
				f=1;
				lst = cur;
				break;
			}
			ans[i] = tmp;
		}
		if(f)continue;
		taken[U[ans[i]]]=taken[V[ans[i]]]=1;
	}
	sort(ans.begin(),ans.end());
	return ans;
}

Compilation message

simurgh.cpp: In function 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:22:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0;j<g[i].size();j++){
               ~^~~~~~~~~~~~
simurgh.cpp:32:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<ans.size();i++){
              ~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 252 KB WA in grader: NO
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 252 KB WA in grader: NO
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 252 KB WA in grader: NO
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 356 KB correct
2 Incorrect 3 ms 560 KB WA in grader: NO
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 252 KB WA in grader: NO
2 Halted 0 ms 0 KB -