UVa 821 Page Hopping【Floyd】

题意:给出一个n个点的有向图,任意两个点之间都相互到达,求任意两点间最短距离的平均值

因为n很小,所以可以用floyd 建立出图,然后用floyd,统计d[][]不为0且不为INF的边的和及条数,就可以了

做的时候统计边的时候没有加不为0这个条件,改了好久= =

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include <cmath>
 5 #include<stack>
 6 #include<vector>
 7 #include<map>
 8 #include<set>
 9 #include<queue>
10 #include<algorithm>
11 using namespace std;
12
13 typedef long long LL;
14 const int INF = (1<<30)-1;
15 const int mod=1000000007;
16 const int maxn=1005;
17 int d[maxn][maxn];
18
19 int main(){
20     int n,m,u,v,ans,kase=0;
21     while(scanf("%d %d",&u,&v)!=EOF){
22         memset(d,0,sizeof(d));
23         if(u==0&&v==0) break;
24
25          for(int i=1;i<=105;i++){
26             for(int j=1;j<=105;j++){
27                 if(i==j) d[i][j]=0;
28                 else d[i][j]=INF;
29             }
30         }
31         n=max(u,v);d[u][v]=1;
32         while(scanf("%d %d",&u,&v)!=EOF){
33             if(u==0&&v==0) break;
34             n=max(max(u,v),n);
35             d[u][v]=1;
36         }
37
38         for(int k=1;k<=n;k++)
39          for(int i=1;i<=n;i++)
40           for(int j=1;j<=n;j++)
41           if(d[i][k]<INF&&d[k][j]<INF)
42            d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
43
44            int sum=0,cnt=0;
45
46            for(int i=1;i<=n;i++)
47             for(int j=1;j<=n;j++)
48                 if(d[i][j]!=INF&&d[i][j]!=0) sum+=d[i][j],cnt++;
49
50             double tmp=1.0*sum/cnt;
51              printf("Case %d: average length between pages = %.3lf clicks\n",++kase,tmp);
52     }
53     return 0;
54 }

时间: 2024-08-01 06:34:28

UVa 821 Page Hopping【Floyd】的相关文章

UVa 821 - Page Hopping(Floyd)

给出能相互到达的网页,输出在给出的网页中相互到达需要点击几次,首先离散化,然后用Floyd求少点击次数,枚举求平均点击次数. #include<cstdio> #include<cstring> #include<algorithm> #include<map> using namespace std; const int maxn=110; const int inf=0x3f3f3f3f; int d[maxn][maxn]; map<int,in

UVa 10801 Lift Hopping【floyd 】

题意:给出n个电梯,每个电梯的运行时间,每个电梯只能在相应的楼层停靠,而且没有楼梯,再给出想去的楼层,问从0层能否到达想去的楼层,求到达的最短时间 建图还是没有建出来--- 因为n<100,可以用floyd 考虑到d[i][j]=min(d[i][j],d[i][k]+d[k][j]) d[i][k]+d[k][j],表示从第i层到达了第k层,又从第k层到达了第j层,说明在  k 层的时候换乘了电梯,需要加一个60 然后就是输入过程中,一直维护d[i][j]的最小值,更新的时候往上往下都要更新(

UVa 821 Page Hopping

题意: 给出一个有向图,求所有路径(两点间的最短路径)的平均值. 分析: 用floyd求两点间的最短距离,然后求平均就好. 代码: #include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;int dist[101][101];int maxn=100000001;int main(){ int a,b,n,cas=1; whil

821 - Page Hopping (Floyd)

很裸的Floyd水题,只需要注意一点: 题目中给的结点编号并不是完整的从1~n,不过没有关系,因为我们初始化为INF,当两点间距离不等于INF时相加就可以了. 细节参见代码: #include<bits/stdc++.h> using namespace std; const int maxn = 105; const int INF = 1000000; int a,b,n,d[maxn][maxn],kase = 0; void Floyd() { for(int k=1;k<=n;

UVA 821 Page Hopping 网页跳跃(BFS,简单)

题意:给一个无权有向图,可认为边的长度为1,求两点间的平均长度(即所有点对的长度取平均),保留3位小数.保证任意点对都可达. 思路:简单题.直接穷举每个点,进行BFS求该点到其他点的距离.累加后除去边数即可. 1 #include <bits/stdc++.h> 2 #define LL long long 3 #define pii pair<int,int> 4 #define INF 0x7f7f7f7f 5 using namespace std; 6 const int

uva 6437 - Power Plant【最小生成树】

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4448 题目大意:和基本的最小生成树想比,其在最开始的时候有多个起点,从任一起点开始生成都可以. 一直到最后才发现做法,就是把起始点都提前加入生成树里面. #include<iostream> #include<stdio.h> #includ

HDU1385 Minimum Transport Cost 【Floyd】+【路径记录】

Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7496    Accepted Submission(s): 1918 Problem Description These are N cities in Spring country. Between each pair of cities

【floyd】HDU 1874 畅通工程续

之后的题解偏重实用/总结性质,尽量理解算法本身而不是题,时间复杂度什么的也可以放放. 很久之前做过这个题,当时使用dijkstra做的,关于几个最短路算法,分类的话可以分为以下几种. 1.单源最短路:已知起点(终点),计算从源点到其他各个顶点的最短路径长度. 典型算法:Dijkstra,Bellman-Ford(可以算负的,比较慢),spfa(负权能用,加了松弛操作,速度比较炸天) 2.全局最短路:从一点到另一点,典型如Floyd,A*启发式算法. 重新用floyd写一遍: #include <

POJ2253 Frogger 【Floyd】

讲的是,一只雄青蛙要从一个石头到另外一个石头上去找某只雌青蛙,但是这两个石头隔得太远,青蛙跳不过去,所幸,湖面上还有很多其他石头,所以青蛙可以借助别的石头一步一步地跳向那只雌青蛙所在的石头.显然青蛙可能有多种路径,比如其中一条是 2,3,4,2,1 ,它跳了五次,数字代表每次跳的距离也就是路径上相邻两个石头之间的距离,那么这只青蛙的弹跳能力至少是4才能跳过去.在其他的路径中,可能要求青蛙的弹跳是5,是8,是1,是100,等等,这个问题求青蛙需要的最小弹跳能力.其实也就是个最大值中取最小的问题.