Submission #126230

#TimeUsernameProblemLanguageResultExecution timeMemory
126230VardanyanNetwork (BOI15_net)C++14
100 / 100
1241 ms70272 KiB
#include <bits/stdc++.h> using namespace std; const int N = 500*1000+5; vector<int> g[N]; bool used[N]; int timer, tin[N], fup[N]; bool f = false; void dfs (int v, int p = -1) { used[v] = true; tin[v] = fup[v] = timer++; for (size_t i=0; i<g[v].size(); ++i) { int to = g[v][i]; if (to == p) continue; if (used[to]) fup[v] = min (fup[v], tin[to]); else { dfs (to, v); fup[v] = min (fup[v], fup[to]); if (fup[to] > tin[v]) f = true; } } } int n; void find_bridges() { timer = 0; f = false; memset(tin,0,sizeof(tin)); memset(fup,0,sizeof(fup)); for (int i=1; i<=n; ++i) used[i] = false; for (int i=1; i<=n; ++i) if (!used[i]) dfs (i); } int main(){ ios_base::sync_with_stdio(false); cin>>n; for(int i = 1;i<=n-1;i++){ int x,y; cin>>x>>y; g[x].push_back(y); g[y].push_back(x); } vector<int> lf; for(int i = 1;i<=n;i++){ if(g[i].size() == 1) lf.push_back(i); } /* cout<<(lf.size()+1)/2<<endl; for(int i = 0;i<lf.size()-1;i+=2){ cout<<lf[i]<< " "<<lf[i+1]<<endl; } if(lf.size()%2){ cout<<lf[lf.size()-1]<<" "<<lf[lf.size()-2]<<endl; }*/ int tim = 50; while(tim--){ random_shuffle(lf.begin(),lf.end()); //cout<<(lf.size()+1)/2<<endl; for(int i = 0;i<lf.size()-1;i+=2){ //cout<<lf[i]<< " "<<lf[i+1]<<endl; g[lf[i]].push_back(lf[i+1]); g[lf[i+1]].push_back(lf[i]); } if(lf.size()%2){ // cout<<lf[lf.size()-1]<<" "<<lf[lf.size()-2]<<endl; g[lf[lf.size()-1]].push_back(lf[lf.size()-2]); g[lf[lf.size()-2]].push_back(lf[lf.size()-1]); } find_bridges(); if(!f){ cout<<(lf.size()+1)/2<<endl; for(int i = 0;i<lf.size()-1;i+=2){ cout<<lf[i]<< " "<<lf[i+1]<<endl; } if(lf.size()%2){ cout<<lf[lf.size()-1]<<" "<<lf[lf.size()-2]<<endl; } return 0; } for(int i = 0;i<lf.size()-1;i+=2){ //cout<<lf[i]<< " "<<lf[i+1]<<endl; g[lf[i]].pop_back(); g[lf[i+1]].pop_back(); } if(lf.size()%2){ // cout<<lf[lf.size()-1]<<" "<<lf[lf.size()-2]<<endl; g[lf[lf.size()-1]].pop_back(); g[lf[lf.size()-2]].pop_back(); } } return 0; }

Compilation message (stderr)

net.cpp: In function 'int main()':
net.cpp:61:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0;i<lf.size()-1;i+=2){
                       ~^~~~~~~~~~~~
net.cpp:74:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int i = 0;i<lf.size()-1;i+=2){
                           ~^~~~~~~~~~~~
net.cpp:82:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
          for(int i = 0;i<lf.size()-1;i+=2){
                        ~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...