[BZOJ 1491] [NOI 2007] 社交网络

好吧先不吐槽这道题的题目是一部介绍facebook的电影……

1491: [NOI2007]社交网络

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1010  Solved: 584
[Submit][Status][Discuss]

Description

Input

Output

输出文件包括n 行,每行一个实数,精确到小数点后3 位。第i 行的实数表 示结点i 在社交网络中的重要程度。

Sample Input

4 4
1 2 1
2 3 1
3 4 1
4 1 1

Sample Output

1.000
1.000
1.000
1.000

HINT


为1

【题解】

首先,这肯定是最短路问题。

看到n<=100,又要求所有点对间的最短路,想到用floyd。

在floyd的时候加上计数即可。

注意:这个计数要应用乘法原理、加法原理;

最后根据I的公式推导出重要程度。

时间复杂度:O(2*n^3+n),即O(n^3),在n=100极限数据并不会爆

贴上代码咯

值得注意的是,这题需要判一下自环,我之前把ans数组设成int了,导致我全部输出0.000 TAT 以后写代码要注意了,不然会浪费挺多时间的。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=100+20,INF=20000001;
 4 double a[MAXN][MAXN];
 5 double mapx[MAXN][MAXN],ans[MAXN];
 6 int n,m;
 7 int main() {
 8     scanf("%d%d",&n,&m);
 9     for (int i=1;i<=n;++i)
10         for (int j=1;j<=n;++j) mapx[i][j]=mapx[j][i]=INF;
11     for (int i=1;i<=m;++i) {
12         int f,t; double w;
13         scanf("%d%d%lf",&f,&t,&w);
14         mapx[f][t]=mapx[t][f]=w;
15         a[f][t]=a[t][f]=1;
16     }
17     for (int k=1;k<=n;++k)
18         for (int i=1;i<=n;++i)
19             for (int j=1;j<=n;++j) {
20                 if(mapx[i][k]+mapx[k][j]<mapx[i][j]) {
21                     mapx[i][j]=mapx[i][k]+mapx[k][j];
22                     a[i][j]=a[i][k]*a[k][j];
23                 }
24                 else if(mapx[i][k]+mapx[k][j]==mapx[i][j]) a[i][j]+=a[i][k]*a[k][j];
25             }
26
27     for (int i=1;i<=n;++i) a[i][i]=0;
28     for (int k=1;k<=n;++k)
29         for (int i=1;i<=n;++i)
30             for (int j=1;j<=n;++j)
31                 if(mapx[i][j]==mapx[i][k]+mapx[k][j] && a[i][j]>0) ans[k]+=a[i][k]*a[k][j]/a[i][j];
32     for (int i=1;i<=n;++i)
33         printf("%.3lf\n",ans[i]);
34     return 0;
35 }

好了其实这题并不难,黄学长他们的题解看上去就比我先进多了

orzhzw,orzzld。

这是我在BZOJ AC的除A+B外的第一题,以此纪念。 2015/5/24

时间: 2024-11-09 06:47:57

[BZOJ 1491] [NOI 2007] 社交网络的相关文章

【BZOJ 1491】 [NOI2007]社交网络

Description Input Output 输出文件包括n 行,每行一个实数,精确到小数点后3 位.第i 行的实数表 示结点i 在社交网络中的重要程度. Sample Input 4 4 1 2 1 2 3 1 3 4 1 4 1 1 Sample Output 1.000 1.000 1.000 1.000 HINT 为1 看到数据范围,显然Floyd map[i][j]表示i-->j的最短路,a[i][j]表示表示从i到j最短路的方案数,在改变最短路时该数组清零 1 #include<

[NOI 2007]社交网络

Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题.在一个社交圈子里有n个人,人与人之间有不同程度的关系.我们将这个关系网络对应到一个n个结点的无向图上,两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值c,c越小,表示两个人之间的关系越密切.我们可以用对应结点之间的最短路长度来衡量两个人s和t之间的关系密切程度,注意到最短路径上的其他结点为s和t的联系提供了某种便利,即这些结点对于

BZOJ 1493 NOI 2007 项链工厂 Splay

题目大意:有一个很长的带颜色的项链,要求你快速的维护一种数据结构,他可以: 1.把序列的后k个放在前面. 2.将区间2~cnt的珠子翻转. 3.将位置i和位置j的珠子互换. 4.将区间i到j染色成k 5.输出整个序列的颜色块的个数 6.输出从i到j的颜色块的个数. 思路:Splay.有些不好处理的是要时刻想着这是一个环,所以所有的计算颜色块的个数的时候要考虑收尾的颜色是否相同.还有从序列的尾部到转一圈回去的情况. 就因为这个题我的代码有个小小小小的问题,花了仨小时的时间带着数据才把错找到..简直

BZOJ 1492 NOI 2007 货币兑换Cash CDQ分治+斜率优化DP

题目大意:有两种金券,A和B.每一天有一个rate值,表示购入的比例:还有每一天AB金券的售价.现在给出初始的钱数,问最后能够获得多少钱. 思路:这算是神题了吧,啃论文啃别人代码将近一天才算有点明白. 首先题目中说的可以买一部分或者卖一部分是扯淡的,因为为了最大获利一定要全部买入,全部卖出.朴素的DP方程就好弄了. 设f[i]为第i天最多的B券的数量.那么f[i] = (rate[j] * f[j] * a[i] + f[j] * b[i]) / (rate[i] * a[i] + b[i])

BZOJ 2436 Noi嘉年华(优化DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2436 题意:有一些活动,起始时间持续时间已知.有两个场地.每个活动最多只能在一个场地举行,且两个场地同一时间不能都举行活动.但是同一场地同一时间可以举行多个活动.要求的是两个场地中活动数目少的场地的活动数目的最大值S.再输出某个活动必须被安排时的S值. 思路:我直接粘贴原思路了. 区间离散化,设A={嘉年华1的活动}, B={嘉年华2的活动},C={未安排的活动}. 设num[i][j

BZOJ 1176 Balkan 2007 Mokia CDQ分治

题目大意:有一些操作,给一个坐标代表的点加上一个数,和求出一个矩形中的所有数的和. 思路:一眼题,二位树状数组水过. ... .. . 哪里不对?W<=2000000.逗我?这n^2能开下? 这个时候CDQ神牛又来帮助我们了. 这个题应该算是CDQ分治的模板题了吧,简单分析一下,其实不难. 写这个题之前建议写一下BZOJ 1935 SHOI 2007 Tree 园丁的烦恼 树状数组这个题,是本题的简化版. 按照正常的解法,我们应该建立一个二位的数据结构,然后分别维护两维的信息.如果用动态开点的线

[Wikioi 2913][BZOJ 1029][JSOI 2007]建筑抢修

题目描述 Description 小刚在玩JSOI提供的一个称之为"建筑抢修"的电脑游戏: 经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建筑设施将会完全毁坏.现在的情况是:T部落基地里只有一个修理工人,虽然他能瞬间到达任何一个建筑,但是修复每个建筑都需要一定的时间.同时,修理工人修理完一个建筑才能修理下一个建筑,不能同时修理多个建筑.如果某个建筑在一段时间之内没有完全修理完毕,这个建筑就报废了.你的

bzoj 1491 floyd

我们用w[i][j]表示i到j的最短路的数量,dis[i][j]表示i到j的最短路,那么我们在floyd的时候,如果dis[i][k]+dis[k][j]==dis[i][j],根据乘法原理我们就w[i][j]+=w[i][k]*w[k][j],小于的时候我们就重新对w[i][j]赋值. 因为floyd最外层循环的为中间节点k,所以k的循环相当于将图拓展了一部分,那么这样最短路的数量不会算重复. 备注:floyd没学好,觉得这么写是不对的,想不出别的方法之后写了写发现对了,然后查了一下floyd

bzoj 1491: [NOI2007]社交网络

Description 在社交网络(socialnetwork)的研究中,我们常常使用图论概念去解释一些社会现象.不妨看这样的一个问题. 在一个社交圈子里有n个人,人与人之间有不同程度的关系.我们将这个关系网络对应到一个n个结点的无向图上, 两个不同的人若互相认识,则在他们对应的结点之间连接一条无向边,并附上一个正数权值c,c越小,表示两个人 之间的关系越密切.我们可以用对应结点之间的最短路长度来衡量两个人s和t之间的关系密切程度,注意到最短路 径上的其他结点为s和t的联系提供了某种便利,即这些