您的位置:首页 > 其它

51Nod - 1366

2018-03-15 13:41 155 查看
按理说是个模板题,一开始以为是差分约束然后搞了搞总是只能过去一部分点,不知道为啥==….

然后发现其实floyd跑一遍就行了,数据范围小的可怜….

最大差值就是最短路里面的最大值….

卒….

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int e[60][60];
int main()
{
int t,n,d,i,j,k;
cin>>t;
while(t--){
string str;
memset(e,0x3f,sizeof(e));
cin>>n>>d;
for(i=0;i<n;i++)e[i][i]=0;
for(i=0;i<n;i++){
cin>>str;
for(j=i+1;j<n;j++){
if(str[j]=='Y')
e[i][j]=e[j][i]=d;
}
}
//        for(i=0;i<n;i++)
//            for(j=0;j<n;j++)cout<<e[i][j]<<' ';
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
int maxn=0;bool wq=false;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++){
if(e[i][j]==0x3f3f3f3f){
wq=true;break;
}
maxn=max(e[i][j],maxn);
}
if(wq)cout<<-1<<endl;
else cout<<maxn<<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: