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 |
枚举等级范围后Dijkstra,discuss前4页所有的数据都对了,可是一交就WA。。求大犇帮助。。//%%%%%dalao /******************* *poj.org Prob. 1062* *Author: Congbo SUN* *******************/ #include<cstdio> #include<cstring> using namespace std; const int MAXN = 100; const int INF = 1000000; const int INFB = 42; struct Node { int val; int lvl; }; struct Node nd[MAXN+2]; int f[MAXN+2][MAXN+2]; int ff[MAXN+2][MAXN+2]; int dis[MAXN+2]; bool vis[MAXN+2]; int n,d; int low,high,base; void Dijkstra(int start) { int i,j,pos; for(j=1; j<n; j++) { pos = -1; for(i=1; i<=n; i++) { if(!vis[i] && (pos == -1 || dis[i] < dis[pos])) { pos = i; } } if(pos == 0) break; vis[pos] = true; for(i=1; i<=n; i++) { if(dis[pos]+f[pos][i] < dis[i]) { dis[i] = dis[pos]+f[pos][i]; } } } } int main() { int i,j,k,x,y,z,tmp,ans; scanf("%d%d",&d,&n); memset(ff,INFB,sizeof(ff)); for(i=1; i<=n; i++) { scanf("%d%d%d",&nd[i].val,&nd[i].lvl,&x); for(j=1; j<=x; j++) { scanf("%d%d",&y,&z); ff[i][y] = z; } } base = nd[1].lvl; for(i=0; i<=d; i++) { memset(dis,INFB,sizeof(dis)); memset(vis,false,sizeof(vis)); high = base+i; low = high-d; for(j=1; j<=n; j++) { for(k=1; k<=n; k++) { if(nd[j].lvl <= high && nd[j].lvl >= low && nd[k].lvl <= high && nd[k].lvl >= low) f[j][k] = ff[j][k]; else f[j][k] = INF+1; if(j == 1) dis[k] = f[j][k]; } } Dijkstra(1); tmp = INF+1; for(j=2; j<=n; j++) { if(dis[j]+nd[j].val < tmp) tmp = dis[j]+nd[j].val; } if(tmp > nd[1].val) tmp = nd[1].val; if(tmp < ans) ans = tmp; } printf("%d\n",ans); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator