题解:P14755 西安之泪

· · 题解

题目大意

给你一颗大小为 n 的树,节点 i 的点权为 a_i,每个点的初始点权都为 0,可以执行以下操作至多 3n 次。

使得对任意的 i,都有 a_i=i

解题思路

不会超过题目要求的 3n 次。

代码

#include <bits/stdc++.h>
using namespace std;
int n,ans;
vector<int>e[200005];
void solve(){
    vector<pair<int,int>>ans;
    cin>>n;
    for(int i=1;i<=n;i++){
        e[i].clear();
    }
    for(int i=1,v,u;i<n;i++){
        cin>>v>>u;
        e[v].push_back(u);
        e[u].push_back(v);
    }
    for(int i=1;i<=n;i++){
        for(int j=0;j<e[i].size();j++){
            ans.push_back({e[i][j],i});
        }
        if(e[i].size()%2==0){
            ans.push_back({i,i});
        }
    }
    cout<<ans.size()<<"\n";
    for(int i=0;i<ans.size();i++){
        cout<<ans[i].first<<" "<<ans[i].second<<"\n";
    }
    return ;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    int T;
    cin>>T;
    while(T--) solve();
    return 0;
}

::::info[来自出题人队友的题目背景补充] 西安之泪是西安绵延的雨,也是一支大二队伍首次参加 XCPC 遗憾铜首的故事。

此题敬2025 ICPC 西安站 I。 ::::