제출 #1335226

#제출 시각아이디문제언어결과실행 시간메모리
1335226LuvidiRigged Roads (NOI19_riggedroads)C++20
49 / 100
2095 ms52224 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fs first
#define sc second
#define pb push_back

const int maxn=3e5;
vector<pii> ad[maxn+1];
vector<int> st;

bool dfs(int v,int p,int t){
    if(v==t)return 1;
    for(auto[u,w]:ad[v])if(u!=p){
        st.pb(w);
        if(dfs(u,v,t))return 1;
        st.pop_back();
    }
    return 0;
}

void solve() {
    int n,m;
    cin>>n>>m;
    pii ed[m+1];
    for(int i=1;i<=m;i++){
        int u,v;
        cin>>u>>v;
        ed[i]={u,v};
    }
    bool sp[m+1];
    memset(sp,0,sizeof(sp));
    for(int i=0;i<n-1;i++){
        int x;
        cin>>x;
        sp[x]=1;
        auto[u,v]=ed[x];
        ad[u].pb({v,x});
        ad[v].pb({u,x});
    }
    int ans[m+1],tt=0;
    bool b[m+1];
    memset(b,0,sizeof(b));
    for(int i=1;i<=m;i++)if(!b[i]){
        b[i]=1;
        if(!sp[i]){
            auto[u,v]=ed[i];
            st.clear();
            dfs(u,u,v);
            sort(st.begin(),st.end());
            for(int x:st){
                if(!b[x]){
                    b[x]=1;
                    ans[x]=++tt;
                }
            }
        }
        ans[i]=++tt;
    }
    for(int i=1;i<=m;i++)cout<<ans[i]<<' ';
    cout<<'\n';
}

int main() {
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    solve();
}
#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...