码迷,mamicode.com
首页 > 其他好文 > 详细

[NOI 2007]社交网络

时间:2017-11-26 21:05:28      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:循环   font   +=   枚举   amp   道路   div   int   技术分享   

题目大意:给你一个无向图,每个节点的重要值为任意两个节点(三个节点互不相同)相连时通过这个节点的可能性,求出每个节点的重要值

即:

令Cs,t表示从s到t的不同的最短路的数目,Cs,t(v)表示经过v从s到t的最短路的数目;则定义

技术分享图片

为结点v在社交网络中的重要程度。

题解:用变形的floyd,先求出i->j的道路数,然后枚举i和j求出答案

卡点:
  1.k忘记移动到循环外面(现在用的是i,我懒得改了)

  2.在初始for循环中,把j的范围写成了1~m

 

C++ Code:

sum[b][a]=1;
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (!(i^j))continue;
			for (int k=1;k<=n;k++){
				if (!((i^k)&&(j^k)))continue;
				if (res[j][k]==res[j][i]+res[i][k])sum[j][k]+=sum[j][i]*sum[i][k];
				if (res[j][k]>res[j][i]+res[i][k]){
					res[j][k]=res[j][i]+res[i][k];
					sum[j][k]=sum[j][i]*sum[i][k];
				}
			}
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (!(i^j))continue;
			for (int k=1;k<=n;k++){
				if (!((i^k)&&(j^k)))continue;
				if (sum[j][k]==0)continue;
				if (res[j][k]==res[j][i]+res[i][k])ans[i]+=(double)(sum[j][i]*sum[i][k])/sum[j][k];
			}
		}
		printf("%.3lf\n",ans[i]);
	}
	return 0;
}

 

[NOI 2007]社交网络

标签:循环   font   +=   枚举   amp   道路   div   int   技术分享   

原文地址:http://www.cnblogs.com/Memory-of-winter/p/7900353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!