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

为什么会WA!!!求帮助,快!

Posted by fnoichzhe at 2018-01-30 15:05:46 on Problem 1679
/*一直停留在WA和RUNTIME ERROR中,求帮助!知道的地下评论一下!*/

#include<cstdio>
#include<cstring>
const int N=110;
int t,n,m,x,y,z,p,v,min,ans,num,ans1;
int f[N];
int pre1[N];
int map[N][N];
bool flag[N];
bool ql;
int pre[N];
struct edge1{
	int x,y,z;
};
edge1 edge[N];
int main(){
	freopen("test2.0.in","r",stdin);
	//freopen("poj1679.out","w",stdout);
	scanf("%d",&t);
	while(t--){
		
		scanf("%d%d",&n,&m);
		if(m==0){
			printf("0\n");
		}
		memset(map,0,sizeof map); 
		for(int i=1;i<=m;++i){
			scanf("%d%d%d",&x,&y,&z);
			map[x][y]=z;
			map[y][x]=z;
		}
		
		

		for(int i=0;i<=n;++i)f[i]=1000000;		
		f[1]=0;
		memset(flag,true,sizeof flag);
		memset(pre,-1,sizeof pre);
		
			
		
		

		for(int i=1;i<=n-1;++i){

			min=1000000;
			for(int j=1;j<=n;++j){
				if(f[j]<min and flag[j]){
					min=f[j];
					v=j;
				}
			} 
		
		
			
			flag[v]=false;
		
		
			
			for(int j=1;j<=n;++j){
				if(map[v][j]>0 and flag[j] and map[v][j]<f[j]){
					f[j]=map[v][j];
					pre[j]=v;
				}
			} 
			
		}
		
		
		 
		num=0;
		for(int i=2;i<=n;++i){
			++num;
			edge[num].x=pre[i];
			edge[num].y=i;
			edge[num].z=map[pre[i]][i];
	 } 
		ans=0;
		for(int i=1;i<=n;++i) ans+=f[i];
		
		
		
		for(int ii=1;ii<=n-1;++ii){
			
			map[edge[ii].x][edge[ii].y]=0;
			for(int i=0;i<=n;++i)f[i]=1000000;		
			f[1]=0;
			memset(flag,true,sizeof flag);
			memset(pre1,-1,sizeof pre);
			ans1=0;
			for(int i=1;i<=n-1;++i){
			
				min=1000000;v=-1;
				for(int j=1;j<=n;++j){
					if(f[j]<min and flag[j]){
						min=f[j];
						v=j;
					}
				} 
				if(v==-1){
					printf("%d\n",ans);return 0;
				}
		
			
				ql=true;
				flag[v]=false;
				for(int j=1;j<=n;++j){
					if(map[v][j]>0 and flag[j] and map[v][j]<f[j]){
						f[j]=map[v][j];
						pre1[j]=v;
					}
				}
			}
			for(int i=1;i<=n;++i) ans1+=f[i];
			if(ans1==ans){
				printf("Not Unique!\n");
				ql=false;
				break;
			}else{
				map[edge[ii].x][edge[ii].y]=edge[ii].z;
			}
		}
		if(!ql)continue;
		printf("%d\n",ans);
	}
	
	return 0;
}

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