Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

同请

Posted by shantingst at 2010-11-15 18:52:58 on Problem 3159 and last updated at 2010-11-15 18:54:15
In Reply To:神牛帮忙看一下为什么wa Posted by:xiyangyang790 at 2010-11-15 18:48:30
> #include<cstdio>
> const int maxn=30001, maxm=150002;
> int n,m,E,d[maxn],first[maxn],next[maxm],point[maxm],value[maxm];
> int len,heap[maxn],pla[maxn];
> inline void Add_edge(int u,int v,int w){
> 	point[++E]=v;value[E]=w;next[E]=first[u];first[u]=E;
> }
> void swap(int a,int b){
> 	int t=heap[a];heap[a]=heap[b];heap[b]=t;
> 	pla[heap[a]]=a;pla[heap[b]]=b;
> }
> void up(int x){
> 	while(x>1&&d[heap[x]]<d[heap[x/2]])swap(x,x>>=1);
> }
> void down(int x){
> 	for(int min;x*2<=len;x=min){
> 		min=(x*2<len?(d[heap[x*2]]<d[heap[x*2+1]]?x*2:x*2+1):x*2);
> 		if(d[heap[min]]>=d[heap[x]])break;
> 		swap(x,min);
> 	}
> }
> int main(){
> 	//freopen("3159.in","rb",stdin);
> 	scanf("%d%d",&n,&m);
> 	for(int i=0,x,y,z;i<m;i++){
> 		scanf("%d%d%d",&x,&y,&z);
> 		Add_edge(x,y,z);
> 	}
> 	for(int i=2;i<=n;i++)d[i]=1061109567;
> 	for(int i=1;i<=n;i++)pla[heap[i]=i]=i;
> 	for(len=n;len;){
> 		int p=heap[1];
> 		swap(1,len--);
> 		down(1);
> 		for(int i=first[p];i;i=next[i])
> 			if(d[point[i]]>d[p]+value[i]){
> 				d[point[i]]=d[p]+value[i];
> 				up(pla[point[i]]);
> 			}
> 	}
> 	printf("%d\n",d[n]);
> 	return 0;
> }
想WA就WA,WA得精彩

RP is Important

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator