Submission #1312207

#TimeUsernameProblemLanguageResultExecution timeMemory
1312207aryanRigged Roads (NOI19_riggedroads)C++20
49 / 100
2096 ms36352 KiB
#include<bits/stdc++.h> using namespace std; using i64 = long long; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n,e; cin >> n >> e; vector<pair<int,int>> ed1; for(int i = 0;i < e;i++){ int u,v; cin >> u >> v; u --; v --; ed1.push_back({u,v}); } vector<bool> is(e,false); vector<vector<pair<int,int>>> adj(n); for(int i = 0;i < n - 1;i++){ int u,v; int ind; cin >> ind; ind --; is[ind] = true; u = ed1[ind].first; v = ed1[ind].second; adj[u].push_back({v,ind}); adj[v].push_back({u,ind}); } set<int> st; for(int i = 1;i <= e;i++){ st.insert(i); } vector<int> ans(e,-1); for(int i = 0;i < e;i++){ if(is[i]){ if(ans[i] == -1){ ans[i] = *st.begin(); st.erase(st.begin()); } continue; } int u = ed1[i].first; int v = ed1[i].second; vector<int> par(n,-1); par[u] = i; queue<int> q; q.push(u); while(!q.empty()){ int uu = q.front(); q.pop(); for(pair<int,int> p : adj[uu]){ int vv = p.first; int ind = p.second; if(par[vv] == -1){ par[vv] = ind; q.push(vv); } } } vector<int> bad; int cur = v; while(cur != u){ int cure = par[cur]; if(ans[cure] == -1){ bad.push_back(cure); } if(ed1[cure].first == cur){ cur = ed1[cure].second; }else{ cur = ed1[cure].first; } } sort(bad.begin(),bad.end()); for(int &e : bad){ ans[e] = *st.begin(); st.erase(st.begin()); } ans[i] = *st.begin(); st.erase(st.begin()); } for(int i = 0;i < e;i++){ cout << ans[i] << " "; } cout << '\n'; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...