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了的代码,以及数据,希望管理员加强数据#include<iostream> using namespace std; int m,n; int money[101],rank[101]; int p[101][101]; bool final[101]; int d[101]; int maxn[101]; int minn[101]; int absol(int a) { if(a>=0) return a; else return -a; } void dij(int v) { int i,j,ff,min; for(i=1;i<=n;i++) { d[i]=p[v][i]; maxn[i]=rank[v]>rank[i]?rank[v]:rank[i]; minn[i]=rank[v]<rank[i]?rank[v]:rank[i]; final[i]=false; } final[v]=true; for(i=1;i<n;i++) { min=200000000; for(j=1;j<=n;j++) { if(!final[j]) { if(d[j]<min&&d[j]!=0) { min=d[j]; ff=j; } } } final[ff]=true; for(j=1;j<=n;j++) { if(!final[j]&&(min+p[ff][j]<d[j])&&absol(maxn[ff]-rank[j])<=m&&absol(minn[ff]-rank[j])<=m) { maxn[j]=maxn[ff]>rank[j]?maxn[ff]:rank[j]; minn[j]=minn[ff]<rank[j]?minn[ff]:rank[j]; d[j]=min+p[ff][j]; } } } } int main() { cin>>m>>n; int a,b,c,i,j,minnum; for(i=1;i<=n;i++) { cin>>money[i]>>rank[i]>>a; for(j=1;j<=a;j++) { cin>>b>>c; p[i][b]=c; } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(p[i][j]==0||absol(rank[i]-rank[j])>m) p[i][j]=200000000; } } dij(1); minnum=money[1]; for(i=2;i<=n;i++) { if(d[i]+money[i]<minnum) minnum=d[i]+money[i]; } cout<<minnum<<endl; return 0; } 数据: 10000 3 2 2 1 3 3 1000 2 2 4 1 3 1 1000 3 1 4 2 100 4 0 答案应该是105。 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator