Submission #283958

#TimeUsernameProblemLanguageResultExecution timeMemory
283958hank55663Simurgh (IOI17_simurgh)C++14
51 / 100
352 ms2296 KiB
#include "simurgh.h" #define x first #define y second #define pb push_back #include<bits/stdc++.h> using namespace std; int f[505]; int f2[505]; int Find(int x){ if(f[x]==x)return x; return f[x]=Find(f[x]); } int Find2(int x){ if(f2[x]==x)return x; return f2[x]=Find2(f2[x]); } int check[250500]; int ok[250500]; std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v) { vector<int> ans; int m=u.size(); for(int i = 0;i<n;i++)f2[i]=i; for(int i = 0;i<n;i++){ for(int j=0;j<n;j++)f[j]=Find2(j); vector<int> road; vector<int> road2; vector<int> candidate; for(int j = 0;j<m;j++){ if(Find2(u[j])!=Find2(i)&&Find2(v[j])!=Find2(i)){ if(Find(u[j])!=Find(v[j])&&Find2(u[j])!=Find2(v[j])){ road.pb(j); f[Find(u[j])]=Find(v[j]); } } else if(Find2(u[j])!=Find2(i)||Find2(v[j])!=Find2(i)){ candidate.pb(j); //printf("%d %d\n",i,j); } } map<int,vector<int> > m; for(auto it:candidate){ if(Find2(u[it])==Find2(i)){ m[Find(v[it])].pb(it); } else{ m[Find(u[it])].pb(it); } } vector<pair<int,vector<int> > > vv; for(auto it:m){ vv.pb(it); road2.pb(it.y[0]); } for(auto it:road){ road2.pb(it); } for(auto it:ans)road2.pb(it); swap(road,road2); for(int i = 0;i<vv.size();i++){ int x=-1; for(auto it:vv[i].y){ if(check[it]){ x=it; break; } } if(x!=-1) road[i]=x; } int x=count_common_roads(road); // printf("!\n"); for(int j = 0;j<vv.size();j++){ int need=x; int now=road[j]; vector<int> res; if(check[now]&&!ok[now])need++; for(auto it:vv[j].y){ if(!check[it]){ road[j]=it; int y=count_common_roads(road); // printf("! %d\n",it); if(y>need){ res.clear(); need=y; } if(y==need){ res.push_back(it); } } } for(auto it:res){ check[it]=1,ok[it]=1,ans.pb(it);//printf("%d\n",it); f2[Find2(v[it])]=Find2(u[it]); } for(auto it:vv[j].y){ if(!check[it]){ check[it]=1; ok[it]=0; } } road[j]=now; // printf("%d end\n",i); } } return ans; }

Compilation message (stderr)

simurgh.cpp: In function 'std::vector<int> find_roads(int, std::vector<int>, std::vector<int>)':
simurgh.cpp:59:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::vector<int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   59 |   for(int i = 0;i<vv.size();i++){
      |                 ~^~~~~~~~~~
simurgh.cpp:72:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, std::vector<int> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |   for(int j = 0;j<vv.size();j++){
      |                 ~^~~~~~~~~~
#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...