BZOJ-1491 社交网络 FLoyd+乱搞
感觉这两天一直在做乱搞的题。。。
1491: [NOI2007]社交网络 
Time Limit: 10 Sec  Memory Limit: 64 MB 
Submit: 1279  Solved: 732 
[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 
 
Source
两个floyd,第一个求出最短路径,并记录road【i】【k】和road【k】【j】根据乘法原理,经过k的从i到j的最短路径即为road【i】【k】*road【k】【j】(我会说一开始打成+还死活没看见吗。。。。)然后统计输出即可
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
    int x=0,f=1; char ch=getchar();
    while (ch<'0' || ch>'9'){if (ch=='-') f=-1; ch=getchar();}
    while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();}
    return x*f;
}
int n,m;
int edge[200][200];
long long road[200][200];
double ans[200];
#define inf 1000000001
void floyd()
{
    for (int k=1; k<=n; k++)
        for (int i=1; i<=n; i++)
            for (int j=1; j<=n; j++)
                {
                    if (edge[i][j]>edge[i][k]+edge[k][j])
                        {
                            edge[i][j]=edge[i][k]+edge[k][j];
                            road[i][j]=0;
                        }
                    if (edge[i][j]==edge[i][k]+edge[k][j])
                        road[i][j]+=road[i][k]*road[k][j];
                }
}
void floyed()
{
    for (int i=1; i<=n; i++) road[i][i]=0;
    for (int k=1; k<=n; k++)
        for (int i=1; i<=n; i++)
            for (int j=1; j<=n; j++)
                if (edge[i][j]==edge[i][k]+edge[k][j] && road[i][j]>0)
                    ans[k]+=(double)road[i][k]*(double)road[k][j]/(double)road[i][j];
}
int main()
{
    n=read();m=read();
    for (int i=1; i<=n; i++)
        for (int j=1; j<=n; j++)
            edge[i][j]=inf;
    for (int i=1; i<=m; i++)
        {
            int u=read(),v=read(),c=read();
            edge[u][v]=edge[v][u]=c;
            road[u][v]=road[v][u]=1;
        }
    floyd();floyed();
    for (int i=1; i<=n; i++)
        printf("%.3lf\n",ans[i]);
    return 0;
}BZOJ-1491 社交网络 FLoyd+乱搞的更多相关文章
- BZOJ 1491 社交网络 Floyd 最短路的数目
		题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1491 题目大意: 见链接 思路: 直接用floyd算法求最短路,同时更新最短路的数目即 ... 
- bzoj 2217 [Poi2011]Lollipop 乱搞 贪心
		2217: [Poi2011]Lollipop Time Limit: 15 Sec Memory Limit: 64 MBSec Special JudgeSubmit: 383 Solved ... 
- BZOJ - 2500 树形DP乱搞
		题意:给出一棵树,两个给给的人在第\(i\)天会从节点\(i\)沿着最长路径走,求最长的连续天数\([L,R]\)使得\([L,R]\)为起点的最长路径极差不超过m 求\(1\)到\(n\)的最长路经 ... 
- BZOJ  2456: mode(乱搞)
		挺神奇的一道题,被1M内存坑了好久= =,这道题得记录当前众数以及众数与其他数的差,如果现在读入的这个数与众数相等,就加1,否则减一,如果差为0就替代掉他,可以证明如果众数存在的话这样一定能找出来 C ... 
- BZOJ 1491 社交网络(最短路)
		对于这道题,如果我们能求出s到t的最短路径数目和s由v到t的最短路径数目,剩下的很好求了. 令dis[i][j]表示i到j的最短路径,dp[i][j]表示i到j的最短路径条数,如果dis[s][v]+ ... 
- BZOJ 4216 Pig 分块乱搞
		题意:id=4216">链接 方法:分块以节约空间. 解析: 这题坑的地方就是他仅仅有3M的内存限制,假设我们开longlong前缀和是必死的. 所以考虑缩小这个long long数组 ... 
- bzoj 4260: REBXOR Trie+乱搞
		题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=4260 题解: 啊啊啊. 被这种SB题坑了半天. 求出异或前缀和后 从n到1枚举\(r_1 ... 
- bzoj 1050: [HAOI2006]旅行comf(codevs.cn 1001 舒适的路线) 快排+并查集乱搞
		没用的话:好像很久没发博客了,主要是懒太蒟找不到水题.我绝对没弃坑...^_^ 还用些话:本文为博主原创文章,若转载请注明原网址和作者. 进入正题: 先pa网址: bzoj :http://www.l ... 
- BZOJ 1011--[HNOI2008]遥远的行星(乱搞)
		1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 5684 Solved ... 
随机推荐
- AC日记——铺地毯 洛谷 P1003(水水水水水~)
			题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ... 
- C++ 基础笔记(一)
			解释型和编译型 解释型: 边解释边执行,翻译成机器代码后就执行. 编译型: 整篇代码编译成机器码后,保存在可执行文件中,然后启动该程序文件,运行获得结果. Hello World #include & ... 
- Android SQLite (四 ) 全面详解(二)
			SQLite创建数据库 创建数据库语法: sqlite3 DatabaseName.db 如下展示一个实例: SQLite附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何 ... 
- Git之分支创建策略
			分支策略:git上始终保持两个分支,master分支与develop分支.master分支主要用于发布时使用,而develop分支主要用于开发使用. 创建master的分支developgit che ... 
- MySQL 约束的讲解
			MySQL 约束 作用:保证数据的完整性和一致性按照约束的作用范围分为:表级约束和行级约束.常见的约束类型包括: Not null(非空约束) Primary key (主键约束) Unique ke ... 
- LUA GC 简单测试
			function table.count(t) if type(t) ~= "table" then assert(false) return end for k, _ in pa ... 
- Linux考试易忘命令
			这是为了考试而做的笔记 mv命令可以移动可以改名 mv a /test //移动a到test文件夹下 mv a b //把a改名为b 软链接和硬链接的创建 ln -s profile a //prof ... 
- ZooKeeper学习第三期---Zookeeper命令操作
			一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ... 
- python数字图像处理(13):基本形态学滤波
			对图像进行形态学变换.变换对象一般为灰度图或二值图,功能函数放在morphology子模块内. 1.膨胀(dilation) 原理:一般对二值图像进行操作.找到像素值为1的点,将它的邻近像素点都设置成 ... 
- Java系列: 我的第一个spring aop练习
			看<Spring in action>有一段时间了,陆续也都看懂了,但是看懂和自己动手写确实是两回事,今天花了几个小时陆续开始安装spring,开始使用DI,然后使用AOP,在写AOP例子 ... 
