HDU5723 2016 Multi-University Training Contest 1 (最小生成树+dfs)
2016-07-20 15:39
597 查看
#include<iostream> #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct edge{int u,v,cost;}; bool comp(const edge& e1,const edge& e2) { return e1.cost<e2.cost; } edge es[1000005],nes[200005]; int par[100005],num,head[100005],vis[100005]; long long sum,dp[100005][2],V,E; void init_union_find(int V) { for(int i=1;i<=V;i++) par[i]=i; } int find(int a) { return a==par[a]?a:par[a]=find(par[a]); } void unite(int a,int b) { a=find(a); b=find(b); par[a]=b; } bool same(int a,int b) { a=find(a); b=find(b); return a==b; } void cre(int u,int v,int cost) { if(num>=2*V-2) return; nes[num].v=v;nes[num].cost=cost; nes[num].u=head[u]; head[u]=num++; } long long kruskal() { sort(es,es+E,comp); init_union_find(V); long long res=0; for(int i=0;i<E;i++) { edge e=es[i]; if(!same(e.u,e.v)) { unite(e.u,e.v); cre(e.u,e.v,e.cost); cre(e.v,e.u,e.cost); res+=e.cost; } } return res; } void dfs(int u) { vis[u]=true; dp[u][0]=0; dp[u][1]=1; for(int i=head[u];i!=-1;i=nes[i].u) { int v=nes[i].v; int w=nes[i].cost; if(!vis[v]) { dfs(v); sum +=((dp[u][0]*dp[v][1])+(dp[u][1]*(dp[v][0]+w*dp[v][1]))); dp[u][0] +=(dp[v][0]+dp[v][1]*w); dp[u][1] += dp[v][1]; } } } int main() { int t; scanf("%d",&t); while(t--&&scanf("%lld%lld",&V,&E)!=EOF) { num=0; sum=0; memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); memset(head,-1,sizeof(head)); for(int i=0;i<E;i++) { scanf("%d%d%d",&es[i].u,&es[i].v,&es[i].cost); } printf("%lld ",kruskal()); dfs(1); printf("%.2f\n",sum*1.0/(V*(V-1)/2)); } }
相关文章推荐
- 2016 Multi-University Training Contest 1 1007 Rigid Frameworks
- 2016 Multi-University Training Contest 1 1002 hdu 5724 博弈
- HDOJ 5723 (2016多校联合训练 Training Contest 1) Abandoned country
- http://blog.csdn.net/singwhatiwanna/article/details/42343847
- 2016 Multi-University Training Contest 1 1011 tetrahedron 四面体内切圆
- windbg+sos中的问题 Failed to start stack walk: 80004005
- NotImplementedError: stat.st_dev unsupported or native support failed to load
- SDWebImage NSURLErrorDomain - Code = 406
- hdu 5733 tetrahedron(2016 Multi-University Training Contest 1——几何公式题)
- ActionChains类的介绍
- WebDriverWait类的介绍
- LeetCode[373] Find K Pairs with Smallest Sums
- Xcode报错:process Launch Failed:failed to Get the Task for Process 1285(解决方案)
- 2016 Multi-University Training Contest 1 1011(HDU 5733 计算几何)
- HDU 5274 Chess(SG博弈)---2016 Multi-University Training Contest 1
- (HDU 5733)2016 Multi-University Training Contest 1 tetrahedron(几何)
- [置顶] ActivityThread的main方法究竟做了什么?
- 关于Advertising Campaign
- 2016 Multi-University Training Contest 1
- 2016暑假多校合练第一场Multi-University Training Contest 1 1001 Abandoned country