poj 2139--Six Degrees of Cowvin Bacon

来源:互联网 发布:淘宝电商运营方案 编辑:程序博客网 时间:2024/05/29 08:21

warshall_floyd算法,求任意两点间的最短路 O(V^3)

dp[i][j] = e(i, j)的权值(不存在为Inf,dp[i][i] = 0)

http://poj.org/problem?id=2139

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int inf = 0x3f3f3f3f;int n, m, dp[303][303];void warshall_floyd(){    for(int k=1; k<=n; k++)        for(int i=1; i<=n; i++)            for(int j=1; j<=n; j++) dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);}int main(){    scanf("%d%d", &n, &m);    memset(dp, 0x3f, sizeof(dp));    for(int i=1; i<=n; i++) dp[i][i] = 0;    while(m--){        int a, b[303];        scanf("%d", &a);        for(int i=0; i<a; i++) scanf("%d", &b[i]);        for(int i=0; i<a-1; i++)            for(int j=i+1; j<a; j++)                dp[b[i]][b[j]] = dp[b[j]][b[i]] = 1;    }    warshall_floyd();    int ans = inf;    for(int i=1; i<=n; i++){        int sum = 0;        for(int j=1; j<=n; j++) sum += dp[i][j];        ans = min(ans, sum);    }    printf("%d\n", ans * 100 / (n - 1));    return 0;}


0 0
原创粉丝点击