P1948 [USACO08JAN]Telephone Lines S
求助这道题
for(int i=1;i<=p;++i)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
for(int j=0;j<=k;++j)
{
add(x+j*n,y+j*n,z);
add(y+j*n,x+j*n,z);
}
for(int j=0;j<k;++j)
{
add(x+j*n,y+(j+1)*n,0);
add(y+j*n,x+(j+1)*n,0);
}
}
错误的代码:
#include<bits/stdc++.h>
#include<queue>
using namespace std;
const int N=2020,P=10011,INF=0x3f3f3f;
struct node
{
int v,Next,w;
}e[N*P];
int head[N*N],ecnt;
void add(int u,int v,int w)
{
e[++ecnt].Next=head[u];
head[u]=ecnt;
e[ecnt].v=v;
e[ecnt].w=w;
}
int d[N*N],vis[N*N];
queue<int> q;
int n,p,k;
void spfa()
{
memset(d,0x3f,sizeof(d));
d[1]=0;vis[1]=1;
q.push(1);
while(q.size())
{
int u=q.front();
q.pop();
vis[u]=0;
for(int i=head[u];i;i=e[i].Next)
{
int to=e[i].v;
int w=e[i].w;
if(d[to]>max(d[u],w))
{
d[to]=max(d[u],w);
if(!vis[to])
{
q.push(to);
vis[to]=1;
}
}
}
}
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
cin>>n>>p>>k;
for(int i=1;i<=p;++i)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
for(int j=0;j<=k;++j)
{
add(x+j*n,y+j*n,z);
add(y+j*n,x+j*n,z);
}
for(int j=0;j<k;++j)
{
add(x+j*n,y+(j+1)*n,0);
add(y+j*n,x+(j+1)*n,0);
}
}
spfa();
if(d[(k+1)*n]==INF) cout<<-1;
else cout<<d[(k+1)*n];
return 0;
}