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 |
注意!!这题用memset会莫名其妙的WA#include<stdio.h> #include<string.h> #include<iostream> #include<vector> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;i++) #define rev(i,a,b) for(int i=a;i>=b;i--) #define sf(n) scanf("%d",&n) #define eb push_back #define ll long long #define inf 1<<24 #define pii pair<int,int> #define lowbit(x) x&-x const int N=110; int a[N][N],dis[N][N],pos[N][N]; vector<int>path; void get_path(int i,int j){ if(!pos[i][j])return ; get_path(i,pos[i][j]); path.eb(pos[i][j]); get_path(pos[i][j],j); } void solve(){ int n,m;sf(n);sf(m); rep(i,1,n)rep(j,1,n)a[i][j]=inf,pos[i][j]=0; //memset(a,inf,sizeof(a));memset(pos,0,sizeof(pos)); rep(i,1,n)a[i][i]=0; rep(i,1,m){ int u,v,c;sf(u);sf(v);sf(c); a[u][v]=a[v][u]=min(a[u][v],c); } memcpy(dis,a,sizeof(a)); int ans=inf; rep(k,1,n){ rep(i,1,k-1)rep(j,i+1,k-1){ if(ans>dis[i][j]+a[i][k]+a[k][j]){ ans=dis[i][j]+a[i][k]+a[k][j]; path.clear(); path.eb(i);get_path(i,j);path.eb(j);path.eb(k); } } rep(i,1,n)rep(j,1,n)if(dis[i][j]>dis[i][k]+dis[k][j]){ dis[i][j]=dis[i][k]+dis[k][j];pos[i][j]=k; } } if(ans==inf){ puts("No solution.");return ; } rep(i,0,int(path.size())-1)printf("%d%c",path[i],i==path.size()-1?'\n':' '); } int main(){ int t=1; while(t--) solve(); } //第26行替换掉第25行就WA了,是什么原理呢 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator