您的位置:首页 > 编程语言 > Go语言

Ural 1371. Cargo Agency

2013-11-27 11:49 295 查看
The author is lazy..

Code :

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<math.h>

using namespace std;

#define sf scanf
#define pf printf
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define ll long long
#define CLR(a) memset((a),0,sizeof((a)))
#define bug(x) cerr << "line: " << __LINE__ << ' ' << #x << " =" << (x) << endl;
#define nMax 500010

int first[nMax],to[nMax],w[nMax],nxt[nMax],e;
void addadge(int u,int v,int vl) {
to[e]=v;w[e]=vl;nxt[e]=first[u];first[u]=e;e++;
to[e]=u;w[e]=vl;nxt[e]=first[v];first[v]=e;e++;
}

ll ans;
ll dp[nMax];
int vis[nMax];
ll son[nMax];

void dfs(int u,int fa) {
vis[u] = 1;
dp[u] = 0;
son[u] = 0;
for(int i=first[u],v;i!=-1;i=nxt[i]) if(! vis[v = to[i]]) {
dfs(v,u);
dp[u] += dp[v] + son[v]*w[i];
dp[v] += son[v]*w[i];
son[u] += son[v];
}
son[u] ++;
for(int i=first[u],v;i!=-1;i=nxt[i]) if(to[i] != fa) {
v = to[i];
ans += dp[v] * (son[u]-son[v]) * 2;
}
}
int n;

int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif

while(~sf("%d",&n)){
for(int i=1;i<=n;i++) vis[i]=0,first[i]=-1;
e = 0;
for(int i=1,a,b,c;i<n;i++){
sf("%d%d%d",&a,&b,&c);
addadge(a,b,c);
}
ans = 0;
dfs(1,-1);
pf("%.4lf\n",(double)1.0*ans/n/(n-1));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: