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 |
我被搞毛了。首先说说讨论区的数据,真是水。。结果我都正确,问题是提交WA了。 然后就是讨论区竟然还有说某某数据应该输出什么,结果他没输出这个,但是他A了,我输出了那个正确的结果,我还WA了。 再来说说思路: prim求出最小生成树,然后记录生成树的每一条边,对原先的图删除第i条边,求最小生成树,判断这个值是否与之前第一次的值相等,相等就不唯一,不相等继续循环。直到记录的边被枚举一遍。 这样都不给我A 贴WA代码,有兴趣者看之。我就想问一问大家,我还能不能快乐的在田野上奔跑? #include <stdio.h> #include <string.h> #include <vector> using namespace std; #define MAX 0xffffff int map[10000][10000],low[10000],vis[10000]={0}; int n,m; typedef struct data { int st,et; }data; data plow[10000]; vector<data> G; int ok; int gt=0; int count=0; int prim() { int pos=1,minn; int weight=0; count=0; memset(vis,0,sizeof(vis)); vis[pos]=1; for(int i=1;i<=n;i++) if(i!=pos) {low[i]=map[pos][i]; plow[i].st=pos; plow[i].et=i; } for(int i=0;i<n-1;i++) { minn=MAX; for(int j=1;j<=n;j++) { if(minn>low[j]&&!vis[j]) {minn=low[j]; pos=j; } } weight+=minn; vis[pos]=1; if(ok) {G.push_back((data){plow[pos].st,plow[pos].et}); } if(minn<MAX) count++; for(int j=1;j<=n;j++) if(map[pos][j]<low[j]&&!vis[j]) { low[j]=map[pos][j]; plow[j].st=pos; plow[j].et=j; } } return weight; } int main() { freopen("1.txt","r",stdin); freopen("2.txt","w",stdout); int T,x,y,z,flag; scanf("%d",&T); while(T--) { count=0; gt=0; ok=1; scanf("%d%d",&n,&m); for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) map[i][j]=MAX; for(int i=0;i<m;i++) { scanf("%d%d%d",&x,&y,&z); if(map[x][y]>z) map[x][y]=map[y][x]=z; } G.clear(); int weight=prim(); if(count!=n-1) { printf("Not Unique!\n"); continue; } ok=0; for(int i=0;i<G.size();i++) { flag=0; data &e=G[i]; int f=map[e.st][e.et]; map[e.st][e.et]=map[e.et][e.st]=MAX; int now=prim(); map[e.st][e.et]=map[e.et][e.st]=f; if(now==weight) { flag=1; break; } } if(!flag) printf("%d\n",weight); else printf("Not Unique!\n"); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator