2021 ICPC-济南站 K. Search For Mafuyu

题目:

思路分析:

手动模拟一下样例 发现其实就是一个欧拉序

下面给出代码 

代码实现:

/*
*@Author:   GuoJinlong
*@Language: C++
*/
//#include <bits/stdc++.h>
/*
 *                                                     __----~~~~~~~~~~~------___
 *                                    .  .   ~~//====......          __--~ ~~
 *                    -.            \_|//     |||\\  ~~~~~~::::... /~
 *                 ___-==_       _-~o~  \/    |||  \\            _/~~-
 *         __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *     _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *   .~       .~       |   \\ -_    /  /-   /   ||      \   /
 *  /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 *  |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *           '         ~-|      /|    |-~\~~       __--~~
 *                       |-~~-_/ |    |   ~\_   _-~            /\
 *                            /  \     \__   \/~                \__
 *                        _--~ _/ | .-~~____--~-/                  ~~==.
 *                       ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                  -_     ~\      ~~---l__i__i__i--~~_/
 *                                  _-~-__   ~)  \--______________--~~
 *                                //.-~~~-~_--~- |-------~~~~~~~~
 *                                       //.-~~~--\
 *                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *
 *                               神兽保佑            永无BUG
 */


const  int MAX=105;
int vis[MAX];
int ans[MAX];
ll cnt;
vector<int>v[MAX];
void dfs (ll pos,ll fa){
    cnt++;
    ans[pos]=cnt;
    for(int i=0;i<v[pos].size();i++){
        int u=v[pos][i];
        if(u==fa) continue;
        dfs(u,pos);
        cnt++;
    }
}
void solve(){
    cnt=-1;
    mms(vis,0);
    for(int i=0;i<MAX;i++){
        v[i].clear();
    }
    ll n;
    n=read();
    for(int i=1;i<=n-1;i++){
        int a,b;
        cin>>a>>b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(1,0);
    ll sum=0;
    for(int i=1;i<=n;i++){
        sum+=ans[i];
    }
    printf("%.9f\n",sum*1.0/(n-1)*1.0);
    
}
int main(){
    int t;
    cin>>t;
    while (t--) {
        solve();
    }
}

猜你喜欢

转载自blog.csdn.net/m0_57006708/article/details/121363257