【POJ】2139

来源:互联网 发布:python批处理图片大小 编辑:程序博客网 时间:2024/06/04 00:52

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

N头牛,拍了M部电影,同一部电影中的搭档们距离1,求其中一头牛与其他牛关系路程之和sum最小,输出 sum*100/(n-1)

floyd。
注意: inf不能太大,因为 f[i][k] + f[k][j] 做加法时可能会溢出!

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <queue>#include <algorithm>using namespace std;const int INF=99999999;int n,m;int dis[305][305];int v;int x[305];int ans=INF;void floyd(){    for (int k=1;k<=v;k++){        for (int i=1;i<=v;i++){            for (int j=1;j<=v;j++){                dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);            }        }    }}int main(){    cin >> v >> m;    for (int i=1;i<=v;i++){        for (int j=1;j<=v;j++){            if (i==j) dis[i][j]=0;            else dis[i][j]=INF;        }    }    while (m--){        cin >> n;        for (int i=1;i<=n;i++){            cin >> x[i];        }        for (int i=1;i<n;i++){            for (int j=i+1;j<=n;j++){                dis[x[i]][x[j]]=dis[x[j]][x[i]]=1;            }        }    }    floyd();    for (int i=1;i<=v;i++){        int sum=0;        for (int j=1;j<=v;j++){            sum+=dis[i][j];        }        ans=min(ans,sum);    }    cout << 100*ans/(v-1) << endl;}
原创粉丝点击