poj 2139 Six Degrees of Cowvin Bacon 最短路bellman 多源最短路径 (一次AC)
来源:互联网 发布:linux 守护进程程序 编辑:程序博客网 时间:2024/06/11 16:39
Description
The game works like this: each cow is considered to be zero degrees of separation (degrees) away from herself. If two distinct cows have been in a movie together, each is considered to be one 'degree' away from the other. If a two cows have never worked together but have both worked with a third cow, they are considered to be two 'degrees' away from each other (counted as: one degree to the cow they've worked with and one more to the other cow). This scales to the general case.
The N (2 <= N <= 300) cows are interested in figuring out which cow has the smallest average degree of separation from all the other cows. excluding herself of course. The cows have made M (1 <= M <= 10000) movies and it is guaranteed that some relationship path exists between every pair of cows.
Input
* Lines 2..M+1: Each input line contains a set of two or more space-separated integers that describes the cows appearing in a single movie. The first integer is the number of cows participating in the described movie, (e.g., Mi); the subsequent Mi integers tell which cows were.
Output
Sample Input
4 23 1 2 32 3 4
Sample Output
100
Hint
Source
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f3f
int dist[305][305],a[305];
int n,m,num,cnt;
struct Edge{
int f,t,c;
}edge[1005];
void init()
{
memset(dist,0x3f,sizeof(dist));
for(int i=1;i<=1003;i++)
edge[i].c=inf;
cnt=0;
for(int i=1;i<=n;i++)
dist[i][i]=0; //注意dist[i][i]要初始化为0
}
void bellman()
{
for(int s=1;s<=n;s++) //多源最短路径的处理,在模板中单个起点的while循环外嵌套一层不同起点的循环,同时dist改为二维
{
while(1)
{
bool flag=false;
for(int j=1;j<=cnt;j++)
{
int from=edge[j].f,to=edge[j].t,cost=edge[j].c;
if(dist[s][to]>dist[s][from]+cost)
{
dist[s][to]=dist[s][from]+cost;
flag=true;
}
}
if(!flag)
break;
}
}
int minn=inf,w;
for(int i=1;i<=n;i++)
{
w=0;
for(int j=1;j<=n;j++)
w+=dist[i][j];
if(w<minn)
minn=w;
}
printf("%d\n",(minn*100)/(n-1));
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
init();
for(int k=1;k<=m;k++)
{
scanf("%d",&num);
for(int j=1;j<=num;j++)
scanf("%d",&a[j]);
for(int i=1;i<=num-1;i++)
for(int j=i+1;j<=num;j++)
{
cnt++;
edge[cnt].f=a[i];
edge[cnt].t=a[j];
edge[cnt].c=1;
cnt++;
edge[cnt].f=a[j];
edge[cnt].t=a[i];
edge[cnt].c=1;
}
}
bellman();
}
return 0;
}
- poj 2139 Six Degrees of Cowvin Bacon 最短路bellman 多源最短路径 (一次AC)
- POJ 2139 Six Degrees of Cowvin Bacon(最短路)
- poj 2139 Six Degrees of Cowvin Bacon 最短路
- POJ 2139-Six Degrees of Cowvin Bacon(最短路Floyd)
- Six Degrees of Cowvin Bacon (poj 2139 最短路Floyd)
- POJ 2139 Six Degrees of Cowvin Bacon 最短路
- POJ 2139 Six Degrees of Cowvin Bacon Floyd最短路
- POJ - 2139 Six Degrees of Cowvin Bacon(任意两点最短路,Floyd)
- POJ 2139 Six Degrees of Cowvin Bacon(任意两点最短路,Floyd)
- Poj 2139 Six Degrees of Cowvin Bacon (floyd最短路)
- [POJ](2139)Six Degrees of Cowvin Bacon ---- 最短路径算法(Floyd)
- Six Degrees of Cowvin Bacon(最短路)
- Six Degrees of Cowvin Bacon (最短路)
- POJ 2139 Six Degrees of Cowvin Bacon
- poj 2139--Six Degrees of Cowvin Bacon
- POJ-2139-Six Degrees of Cowvin Bacon
- POJ 2139 Six Degrees of Cowvin Bacon
- Six Degrees of Cowvin Bacon.(POJ-2139)
- 好书分享(一)
- 基础入门:File相对路径
- 深入理解mybatis原理(四) MyBatis的二级缓存的设计原理
- POJ 3255 Roadblocks 最短路Dijkstra+堆优化
- poj 3723 最大生成树
- poj 2139 Six Degrees of Cowvin Bacon 最短路bellman 多源最短路径 (一次AC)
- Codeforces Round #329 (Div. 2) A. 2Char 字符串+暴力
- poj 3259 Wormholes 最短路bellman 题意转化很重要
- Spring配置之RMI
- poj 2456 Aggressive cows 整数二分写法 模板题
- poj 3104 Drying 二分搜索--查找最小yes值
- poj 3111 K Best 二分搜索 最大化平均值
- POj 3258 River Hopscotch 二分搜索 最大化最小值
- poj 2674 Linear world 弹性碰撞 升级的蚂蚁