Page Hopping UVA - 821
题意:(lrj老师的翻译)
最近的研究表明,互联网上任何一个网页在平均情况下,最多只需要单机19次就能到达任意一个其他网页。如果把网页看成一个有向图的结点,则该图中任意两点间的最短距离的平均值是19.
求:
输入一个n个点的有向图。(任意结点a
∈
[
1
,
100
]
\in[1,100]
∈[1,100])。数据保证任意两个点之间可以相互到达。求图中任意两点间的最短距离的平均值
思路:
-
首先可以发现数据小,又是求最短路,可以考虑floyd
-
观察sample_test2可以发现,点的编号是无关紧要的。(这里把不相关的点初始化为inf即可)
AC
/*
皮卡丘冲鸭!
へ /|
/\7 ∠_/
/ │ / /
│ Z _,< / /`ヽ
│ ヽ / 〉
Y ` / /
イ● 、 ● ⊂⊃〈 /
() へ | \〈
>ー 、_ ィ │ //
/ へ / ノ<| \\
ヽ_ノ (_/ │//
7 |/
>―r ̄ ̄`ー―_
*/
#include <iostream>
#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y) for(int i=(x); i<(y); i++)
#define rep(i,y,x) for(int i=(y); i>=(x); i--)
#define mst(x,a) memset(x,a,sizeof(x))
#define pb push_back
#define sz(a) (int)a.size()
#define ALL(x) x.begin(),x.end()
#define mp make_pair
#define fi first
#define se second
#define db double
#define debug(a) cout << #a << ": " << a << endl
using namespace std;
typedef long long LL;
typedef long long ll;
typedef unsigned long long ULL;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int inf = 0x3f3f3f3f;
typedef pair<int,int>pa;
typedef pair<ll,ll>pai;
typedef pair<db,db> pdd;
const int N = 2e5+10;
const int M = 1e5;
const int maxn=1e6+10;
const db eps = 1e-8;
const db pi = acos(-1.0);
template<class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
template<class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }
int f[210][210];
int n, m;
void floyd(){
For(k,1,n)For(i,1,n)For(j,1,n)f[i][j]=min(f[i][k]+f[k][j],f[i][j]);
}
int main()
{
//ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int a, b, cas = 0;
mst(f,0x3f);
For(i,1,200)f[i][i] = 0;
while(scanf("%d%d", &a, &b)&&(a||b)){
n = max(n, max(a,b));
f[a][b] = 1;
while(scanf("%d%d", &a, &b)&&(a||b))f[a][b] = 1,n = max(n, max(a,b));
floyd();
int frac_son = 0;
int frac_mother = 0;
For(i,1,n)For(j,1,n){
if(i==j||f[i][j]==inf)continue;
frac_son += f[i][j];
frac_mother++;
}
printf("Case %d: average length between pages = %.3f clicks\n",++cas, (double)frac_son/frac_mother);
mst(f,0x3f); n = 0;
For(i,1,200)f[i][i] = 0;
}
return 0;
}