#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define per(i,a,b) for(int i = a; i >= b; i--)
#define pii pair<int,int>
#define pb push_back
#define fi first
#define se second
const int MAXN = 3e5+10;
const int INF = 1e18+10;
vector<int> g[MAXN];
int u[MAXN], v[MAXN], val[MAXN], a[MAXN];
int spa[MAXN];
bool ispa[MAXN];
int t = 0;
int dfs(int u, int p = -1) {
for (int &v : g[u]) if (v!=p) a[u] = min(a[u],dfs(v,u));
return a[u];
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(nullptr);
int n,m; cin >> n >> m;
rep(i,1,m) cin >> u[i] >> v[i];
rep(i,1,n) a[i] = INF;
rep(i,1,n-1) {
int c;cin >> c;
spa[i] = c;
ispa[c] = 1;
int x = u[c], y=v[c];
g[x].pb(y);
g[y].pb(x);
}
vector<array<int,3>> ord;
rep(i,1,m) if (!ispa[i]) {
a[u[i]] = min(a[u[i]], i);
a[v[i]] = min(a[v[i]], i);
ord.pb({i,1,i});
}
dfs(1);
rep(i,1,n-1) {
int x = spa[i];
ord.pb({min(x,max(a[u[x]], a[v[x]])), 0, x});
}
sort(ord.begin(),ord.end());
rep(i,1,m) {
val[ord[i-1][2]] = i;
}
rep(i,1,m) cout << val[i] << " \n"[i==m];
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... |