#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |