![](http://acm.fzu.edu.cn/image/problem.gif)
Accept: 149 Submit: 256
Time Limit: 1000 mSec Memory Limit : 32768 KB
Problem Description
Input
Output
Sample Input
2
4
3
0 1
2 1
1 3
0 3
2
1
0 1
1 0
Sample Output
Case 1: 4
Case 2: 1
Source
Summer Training I--Graph
有n个点,m条边,和一个起点终点,每一条边都是无向边,而且权值为1,问一条最长路,使得从起点先到这个点之后,再从这个点到终点的路径值。
思路:
1、Floyd求一遍最短路。
2、枚举一遍最大值,ans=max(map[s][i]+map[i][e])【0<=i<n】;
Ac代码:
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int map[105][105];
int main()
{
int t;
int kase=0;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
map[i][j]=0x3f3f3f3f;
}
map[i][i]=0;
}
for(int i=0;i<m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
map[x][y]=map[y][x]=1;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
map[j][k]=min(map[j][k],map[j][i]+map[i][k]);
}
}
}
int s,e;
int output=0;
scanf("%d%d",&s,&e);
for(int i=0;i<n;i++)
{
output=max(output,map[s][i]+map[i][e]);
}
printf("Case %d: %d\n",++kase,output);
}
}