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 |
Re:请帮忙看看好吗?为什么答案对了还是WA?奇怪。用的是kruskal(初始化的时候把给定好的路径进行处理,直接加入连同集合里了)或者给些奇怪的数据吧。In Reply To:请帮忙看看好吗?为什么答案对了还是WA?奇怪。用的是kruskal(初始化的时候把给定好的路径进行处理,直接加入连同集合里了)或者给些奇怪的数据吧。 Posted by:JohnHoward at 2007-11-28 01:43:32 > 请帮忙看看好吗?为什么答案对了还是WA?奇怪。用的是kruskal(初始化的时候把给定好的路径进行处理,直接加入连同集合里了)或者给些奇怪的数据吧。 > > > 测试数据为 > 4 > 0 1 1 1 > 1 0 1 1 > 1 1 0 1 > 1 1 1 0 > 2 > 1 2 > 3 4 > > 4 > 0 10 10 10 > 10 0 1 10 > 10 1 0 10 > 10 10 10 0 > 1 > 1 2 > > 3 > 0 990 692 > 990 0 179 > 692 179 0 > 1 > 2 1 > > 答案为 > 1 > 11 > 179 > > Code:如下: > > #include<stdio.h> > > #define MAX 10005 > > > > typedef struct{ > int from; > int to; > int value; > int flag; > }edge; > int vset[MAX]; > int array[MAX][MAX]; > edge e[MAX]; > > void insertsort( int n ) > { > int i,j; > > for(i=2;i<=n;i++) > {if(e[i].value<e[i-1].value){ > e[0]=e[i]; > e[i]=e[i-1]; > for(j=i-2;e[0].value<e[j].value;j--) > { > e[j+1]=e[j]; > } > e[j+1]=e[0]; > } > } > > } > > int kruskal(int n ) > { > int a,b,i,j,m1,m2,sn1,sn2,k,m; > int sum=0; > > k=1; > > for(i=1;i<=n;i++) > vset[i]=i; > > scanf("%d",&m); > for(i=1;i<=m;i++) > {scanf("%d %d",&a,&b); > array[a][b]=-1; > array[b][a]=-1; > vset[a]=-2;vset[b]=-2; > } > > > > > for(i=1;i<=n;i++) > for(j=i+1;j<=n;j++) > { > if(array[i][j]!=0&&array[i][j]!=-1) > {e[k].from=i;e[k].to=j;e[k].value=array[i][j];e[k].flag=0;k++;} > else if(array[i][j]==-1) > {e[k].from=i;e[k].to=j;e[k].value=0;e[k].flag=1;k++;} > } > > > insertsort(n); > > > k=1;j=1; > > while(k<n-m) > { > m1=e[j].from; > m2=e[j].to; > sn1=vset[m1]; > sn2=vset[m2]; > if(sn1!=sn2) { > k++;e[j].flag=1; > sum=e[j].value+sum; > for(i=1;i<=n;i++) if(vset[i]==sn2) vset[i]=sn1;} > j++; > > } > return sum; > > } > > > > > int main() > { > int i,j; > int n,sum ; > > while(scanf("%d",&n)!=EOF){ > > for(i=1;i<=n;i++) > for(j=1;j<=n;j++) > { > scanf("%d",&array[i][j]); > } > > sum=kruskal(n); > > 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