zoukankan      html  css  js  c++  java
  • 839C

     839C - Journey

    题意:

    题解:dfs

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 const int maxn=100010;
     5 struct Edge{
     6     int v,nex;
     7 }e[maxn<<1];
     8 int head[maxn];
     9 int cnt=0;
    10 void init(){
    11     memset(head,-1,sizeof(head));
    12     cnt=0;
    13 }
    14 void add(int u,int v){
    15     e[cnt].v=v;
    16     e[cnt].nex=head[u];
    17     head[u]=cnt++;
    18 }
    19 double ans;
    20 
    21 int deg[maxn];  //无重边的情况下直接记录度数就可以确定儿子了
    22 void dfs(int u,int f,int d,double p){
    23     for(int i=head[u];~i;i=e[i].nex){
    24         int v=e[i].v;
    25         if(v==f) continue;
    26         if(deg[v]==1) {ans+=(d+1)*p;continue;}
    27         dfs(v,u,d+1,p*1.0/(deg[v]-1));
    28     }
    29 
    30 }
    31 int main(){
    32     int n;
    33     scanf("%d",&n);
    34     init();
    35     int u,v;
    36     for(int i=1;i<n;i++){
    37         scanf("%d%d",&u,&v);
    38         add(u,v);add(v,u);
    39         deg[u]++;deg[v]++;
    40     }
    41     ans=0;
    42     dfs(1,0,0,1.0/deg[1]);
    43     printf("%lf
    ",ans);
    44 }
    View Code
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 const int maxn=100010;
     5 struct Edge{
     6     int v,nex;
     7 }e[maxn<<1];
     8 int head[maxn];
     9 int cnt=0;
    10 void init(){
    11     memset(head,-1,sizeof(head));
    12     cnt=0;
    13 }
    14 void add(int u,int v){
    15     e[cnt].v=v;
    16     e[cnt].nex=head[u];
    17     head[u]=cnt++;
    18 }
    19 double ans;
    20 int son[maxn];
    21 
    22 void dfs1(int u,int f){
    23     for(int i=head[u];~i;i=e[i].nex){
    24         int v=e[i].v;
    25         if(v==f) continue;
    26         son[u]++;
    27         dfs1(v,u);
    28     }
    29 }
    30 void dfs(int u,int f,int d,double p){
    31     for(int i=head[u];~i;i=e[i].nex){
    32         int v=e[i].v;
    33         if(v==f) continue;
    34         dfs(v,u,d+1,p*1.0/son[u]);
    35     }
    36     if(son[u]==0) {
    37         ans+=d*p;
    38     }
    39 }
    40 
    41 int main(){
    42     int n;
    43     scanf("%d",&n);
    44     init();
    45     int u,v;
    46     for(int i=1;i<n;i++){
    47         scanf("%d%d",&u,&v);
    48         add(u,v);
    49         add(v,u);
    50     }
    51     ans=0;
    52     dfs1(1,0);
    53     dfs(1,0,0,1);
    54     printf("%lf
    ",ans);
    55 }
    View Code
  • 相关阅读:
    第01组 Beta冲刺(5-5)
    第01组 Beta冲刺(4-5)
    第01组 Beta冲刺(3-5)
    第01组 Beta冲刺(2-5)
    第01组 Beta冲刺(1-5)
    软工实践个人总结
    第03组 每周小结 (3/3)
    第03组 每周小结 (2/3)
    第03组 每周小结 (1/3)
    第03组 Beta冲刺 总结
  • 原文地址:https://www.cnblogs.com/yijiull/p/7363431.html
Copyright © 2011-2022 走看看