P1629交上去不对,但把测试点下下来,直接用cmd输入测试点是对的,诡异
#include<bits/stdc++.h>
using namespace std;
int a[10002][10002],d[10002],vis[10002];
const int MAXN=1<<29;
void dij(int n,int s)
{
for(int i=1;i<=n;i++)
{
d[i]=a[s][i];
vis[i]=0;
}
vis[s]=1;
d[s]=0;
for(int i=1;i<=n-1;i++)
{
int minn=MAXN,u=-1;
for(int j=1;j<=n;j++)
{
if(vis[j]==0&&d[j]<minn)
{
minn=d[j];
u=j;
}
}
vis[u]=1;
for(int j=1;j<=n;j++)
{
if(vis[j]==0&&d[u]+a[u][j]<d[j])
d[j]=d[u]+a[u][j];
}
}
}
int main()
{
int n,m,x,y,z;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j)
a[i][j]=MAXN;
}
}
for(int i=1;i<=m;i++)
{
cin>>x>>y>>z;
a[x][y]=min(a[x][y],z);
}
dij(n,1);
int ans;
for(int i=1;i<=n;i++)
{
ans+=d[i];
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
swap(a[i][j],a[j][i]);
dij(n,1);
for(int i=1;i<=n;i++)
{
ans+=d[i];
}
cout<<ans;
return 0;
}
本蒟蒻不想活了.jpg