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完心情不错,且屋外天气晴朗就帮忙看看~~~#define MAXN 1<<26 #include<iostream> #include<algorithm> using namespace std; int i,j,k,n,m; int A,B,C; int map[1005][1005]; int dis[1005][2]; int v[1005]; int cnt[1005][2]; struct E { E *next; int data; int len; }*adj[1005],*p; void Init() { int i,j,k; for(i=1;i<=n;i++) { adj[i]=NULL; cnt[i][0]=cnt[i][1]=0; dis[i][0]=dis[i][1]=MAXN; v[i]=0; } } void dij(int s){ int i,j,Min,Mini,tp; E *p; v[s]=1; p=adj[s]; while(p) { if(dis[p->data][0]>p->len) { dis[p->data][1]=dis[p->data][0]; dis[p->data][0]=p->len; cnt[p->data][1]=cnt[p->data][0]; cnt[p->data][0]=1; } else if(dis[p->data][0]==p->len)cnt[p->data][0]++; else { if(dis[p->data][1]>p->len) { dis[p->data][1]=p->len; cnt[p->data][1]=1; } else if(dis[p->data][1]==p->len) cnt[p->data][1]++; } p=p->next; } dis[s][0]=dis[s][1]=0; for(i=1;i<n;i++) { Min=MAXN,Mini=-1; for(j=1;j<=n;j++) if(!v[j] && Min>dis[j][0]) Min=dis[j][0],Mini=j; if(Mini<0)break; v[Mini]=1; for(p=adj[Mini];p;p=p->next){ j=p->data; if(dis[j][0]>Min+p->len) { dis[j][1]=dis[j][0]; dis[j][0]=Min+p->len; cnt[j][1]=cnt[j][0]; cnt[j][0]=cnt[Mini][0]; } else if(dis[j][0]==Min+p->len) cnt[j][0]++; else { tp=Min+p->len; if(dis[j][1]>tp) dis[j][1]=tp,cnt[j][1]=cnt[Mini][1]; else if(dis[j][1]==tp) cnt[j][1]++; } } } } int main() { int T,s,e,sum; for(scanf("%d",&T);T--;) { scanf("%d%d",&n,&m); Init(); for(i=0;i<m;i++) { scanf("%d%d%d",&A,&B,&C); p=new E; p->data=B; p->len=C; p->next=adj[A]; adj[A]=p; } scanf("%d%d",&s,&e); dij(s); sum=0; if(dis[e][0]<MAXN)sum+=cnt[e][0]; if(dis[e][0]==dis[e][1]-1)sum+=cnt[e][1]; printf("%d\n",sum); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator