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 |
我已经被WA脑残了。求解释。#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=(1<<30)-1; int main() { int M,N; int rank[101]; int v[101]; int dis[101][101]; int result[101]; int record[101]={0}; int i,j,k; scanf("%d%d",&M,&N); for (i=0;i<=N;i++) for (j=0;j<=N;j++) dis[i][j]=maxn; for (i=1;i<=N;i++) { int k,num,price; scanf("%d%d%d",&v[i],&rank[i],&k); for (j=1;j<=k;j++) { scanf("%d%d",&num,&price); dis[i][num]=price; } } int total; int minn=v[1]; for (k=2;k<=N;k++) { memset(record,0,sizeof(record)); int x; if (abs(rank[1]-rank[k])>M) continue; for (x=1;x<=N;x++) { if (abs(rank[k]-rank[x])>M || abs(rank[1]-rank[x])>M) record[x]=1; } for (i=1;i<=N;i++) result[i]=dis[1][i]; int pos=1; int min; record[1]=1; while (pos!=k) { min=maxn; for (i=1;i<=N;i++) { if (!record[i] && result[i]<min) { min=result[i]; pos=i; } } record[pos]=1; if (min==maxn) break; for (i=1;i<=N;i++) { if (!record[i] && min+dis[pos][i]<=result[i] ) { result[i]=min+dis[pos][i]; } } } total=0; total+=result[k]; total+=v[k]; if (total<minn) minn=total; } if (minn==maxn) printf("%d\n",v[1]); else printf("%d\n",minn); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator