제출 #757864

#제출 시각아이디문제언어결과실행 시간메모리
757864alexander707070Simurgh (IOI17_simurgh)C++14
30 / 100
156 ms4100 KiB
#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],t,good; 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],first; int dsu[MAXN]; int root(int x){ if(dsu[x]==x)return x; dsu[x]=root(dsu[x]); return dsu[x]; } 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<n;i++){ dsu[i]=i; } 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}); } for(int i=0;i<n;i++){ random_shuffle(vv[i].begin(),vv[i].end()); } dfs(0); random_shuffle(tree.begin(),tree.end()); 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]],-1,1); comp(b[tree[i]],-1,2); maxres=0; first=true; good=-1; for(int f=0;f<m;f++){ res[f]=0; if(where[a[f]]!=where[b[f]] and (root(a[f])!=root(b[f]) or (first and golden[f]))){ if(root(a[f])==root(b[f]))first=false; ask.push_back(f); res[f]=count_common_roads(ask); if(res[f]>maxres and maxres>0)good=res[f]; if(res[f]==good){ golden[f]=true; dsu[root(a[f])]=root(b[f]); } 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; dsu[root(a[f])]=root(b[f]); } } } for(int i=0;i<m;i++){ if(golden[i]){ ans.push_back(i); } } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

simurgh.cpp: In function 'void dfs(int)':
simurgh.cpp:23: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]
   23 |  for(int i=0;i<vv[x].size();i++){
      |              ~^~~~~~~~~~~~~
simurgh.cpp: In function 'void comp(int, int, int)':
simurgh.cpp:33:15: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |  for(int i=0;i<g[x].size();i++){
      |              ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...