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 |
c++ 选手一定要用G++提交!!!!!!!!!!!!!否则会wa!<---血的教训(附代码,最小瓶颈路,n²)(绝对没有不连通图)#include<cstdio> #include<algorithm> #include<cstring> using namespace std; struct Edge { int u,v,w; void scan() { scanf("%d%d%d",&u,&v,&w); } }; Edge edges[500001]; int ljb[201][201],en; int T,n,m,fa[201],rank[201],tot,sum,maxcost[201][201]; int map[201][201],delta; bool vis[201],used[201],hav[201]; void init() { memset(rank,0,sizeof(rank)); for(int i=1;i<=n;i++) fa[i]=i; } int rt; int findroot(int x) { if(fa[x]==x) return fa[x]; rt=findroot(fa[x]); fa[x]=rt; return rt; } void Union(int f1,int f2) { if(rank[f1]<rank[f2]) fa[f1]=f2; else { fa[f2]=f1; if(rank[f1]==rank[f2]) rank[f1]++; } } bool cmp(const Edge &a,const Edge &b) { return a.w<b.w; } void dfs(int cur,int father) { vis[cur]=hav[cur]=true; for(int i=1;i<=n;i++) if(hav[i]&&i!=cur) maxcost[i][cur]=maxcost[cur][i]=max(maxcost[i][father],map[cur][father]); for(int i=1;i<=ljb[cur][0];i++) if(!vis[ljb[cur][i]]) dfs(ljb[cur][i],cur); vis[cur]=false; } int main() { scanf("%d",&T); for(int zu=1;zu<=T;zu++) { en=tot=sum=0; delta=2147483647; memset(ljb,0,sizeof(ljb)); memset(maxcost,0,sizeof(maxcost)); memset(hav,false,sizeof(hav)); memset(vis,false,sizeof(vis)); memset(map,0,sizeof(map)); memset(used,false,sizeof(used)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) edges[i].scan(); sort(edges+1,edges+1+m,cmp); init(); for(int i=1;i<=m;i++) { int F1=findroot(edges[i].u),F2=findroot(edges[i].v); if(F1!=F2) { Union(F1,F2); ljb[edges[i].u][++ljb[edges[i].u][0]]=edges[i].v; used[i]=true; ljb[edges[i].v][++ljb[edges[i].v][0]]=edges[i].u; map[edges[i].u][edges[i].v]=map[edges[i].v][edges[i].u]=edges[i].w; sum+=edges[i].w; tot++; if(tot==n-1) break; } } dfs(edges[1].u,0); for(int i=1;i<=m;i++) if(!used[i]) delta=min(delta,edges[i].w-maxcost[edges[i].u][edges[i].v]); if(delta<=0) printf("Not Unique!\n"); else 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