poj3662 Telephone Lines
Posted kgxw0430
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj3662 Telephone Lines相关的知识,希望对你有一定的参考价值。
蒟蒻的代码,WA掉了
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> using namespace std; int n,p,k;int len; int head,tail; int lin[1100],next[1100],ver[1100],v[1100]; int d[1100][1100]; int q[201000];bool f[1100]={}; void add(int x,int y,int z) { next[++len]=lin[x]; ver[len]=y;v[len]=z; lin[x]=len; } int main() { scanf("%d%d%d",&n,&p,&k); memset(d,10,sizeof(d)); for(int i=1;i<=p;i++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); add(x,y,z);add(y,x,z); if(x==1) { for(int j=1;j<=k;j++) d[y][j]=0; } else if(y==1) { for(int j=1;j<=k;j++) d[x][j]=0; } } q[++tail]=1;f[1]=1; for(int i=0;i<=k;i++) d[1][i]=0; while(head++<tail) { int tmp=q[head];f[tmp]=0; for(int i=lin[tmp];i;i=next[i]) { int y=ver[i]; bool flag=false; for(int j=0;j<=k;j++) { if(j>0) d[y][j]=min(d[y][j-1],d[y][j]); if(d[y][j]>max(d[tmp][j],v[i])) d[y][j]=max(d[tmp][j],v[i]),flag=1; if(d[y][j]>d[tmp][j-1]) d[y][j]=d[tmp][j-1],flag=1; } if(flag) q[++tail]=y; } } printf("%d\n",d[n][k]); return 0; }
以上是关于poj3662 Telephone Lines的主要内容,如果未能解决你的问题,请参考以下文章
POJ 3662 Telephone Lines (分层图)
POJ 3662 Telephone Lines (分层图做法)
poj 3662 Telephone Lines(最短路+二分)