题解 P1821 【[USACO07FEB]银牛派对Silver Cow Party】
嘿嘿,面前大佬皆用
先看一下数据范围:
没关系,别忘了我们有
那么直接上代码了!
// luogu-judger-enable-o2 //大家一定要开O2否则会T(这不是废话吗?)
#include<bits/stdc++.h>
using namespace std;
int ans=INT_MIN,dis[3005][3005],n,m,q,u,v,x,y;
int main()
{
cin>>n>>m>>q;
memset(dis,0x3f,sizeof(dis)); //Floyd初始值要赋为无限大,但是怕过int我们开的是0x3f而不是0x7f
for(int i=1;i<=m;i++)
{
cin>>u>>v;
cin>>dis[u][v];
}
for(int k=1;k<=n;k++) //Floyd正片开始:三重循环!!!
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
for(int i=1;i<=n;i++)
{
if(i!=q) //一定要加这句话啊不然就会WA
{
ans=max(ans,dis[i][q]+dis[q][i]); //他是要过去再回来哦!!!!
}
}
cout<<ans<<endl;
return 0;
}
但是还是推荐