Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
自己测ac,在这里re。。。。poj的c++真不地道直接上代码 #include<cstdio> int N,P,K; struct edges { struct edges *next; int nextvex; long l; int temp; edges(){next=NULL;nextvex=-1;} }; struct vexs { struct edges *next; int data; vexs(){next=NULL;} }vex[2000]; int findmin(int used[],int opt[]) { int minn,min; int i,j; min=32767; for(i=1;i<=N;i++) { if((opt[i]<min)&&(used[i]==0)) {minn=i; min=opt[i];} } return minn; } int dij(struct vexs ve[]) { int used[2000]={0}; int i,j,min; struct edges *t; int opt[1001]; ////////////init for(i=1;i<=N;i++) opt[i]=32767; opt[1]=0; t=ve[1].next; while(t!=NULL) {opt[t ->nextvex]=t ->temp; t=t->next;} ///////////////////init done! for(i=1;i<=N;i++) { if(used[N]==1) break; min=findmin(used,opt); used[min]=1; t =ve[min].next; while(t !=NULL){ if((t ->temp+opt[min])<opt[t ->nextvex]) { opt[t->nextvex]=t->temp+opt[min]; }t=t->next; } } return opt[N]; } long erfen(int fir,int las) { int i,j,min=2000000; int k; struct edges *t; while(fir<las) { j=(fir+las)/2; for(i=1;i<=N;i++) { t=vex[i].next; while(t!=NULL) { t->temp=((t->l)>j)?1:0; t =t ->next; } } k=dij(vex); if(k<=K) { if(j<min) min=j; las=j; } else { fir=j+1; } } if(min>=200000) return -1; return min; } void insert(int s,int e,int l) { struct edges *temp1,*temp2; temp1=new edges; temp2=new edges; temp1->nextvex=e; temp1->l=l; temp1->next=vex[s].next; vex[s].next=temp1; /// temp2->nextvex=s; temp2->l=l; temp2->next=vex[e].next; vex[e].next=temp2; } int main() { int i,j; int s,e,l; int maxl,minl; ////////// scanf("%d%d%d",&N,&P,&K); maxl=0; minl=32767; for(i=1;i<=P;i++) { scanf("%d%d%d",&s,&e,&l); insert(s,e,l); if(l>maxl) maxl=l; if(l<minl) minl=l; } printf("%ld",erfen(minl-1,maxl+1)); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator