zoukankan      html  css  js  c++  java
  • poj1679 kruskal

    判断最小生成树是否唯一。kruskal时记录需要的边,然后枚举删除它们,每次删除时进行kruskal,如果值未变,表明不唯一。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<stack>
    using namespace std;
    struct Node
    {
        int l;
        int r;
        int v;
    }node[10020];
    int pa[2003],n;
    bool cmp(Node a,Node b)
    {
        return a.v<b.v;
    }
    void init()
    {
        for(int i=0;i<=n;i++)
            pa[i]=i;
    }
    int find(int x)
    {
        if(x!=pa[x])
            pa[x]=find(pa[x]);
        return pa[x];
    }
    int kruskal(Node temp)
    {
        init();
        int i,j,ret=0;
        for(i=0;i<n;i++)
        {
            int l1,l2;
            if(node[i].l==temp.l&&node[i].r==temp.r)
                continue;
            l1=find(node[i].l);
            l2=find(node[i].r);
            if(l1!=l2)
            {
                ret+=node[i].v;
            }
        }
        return ret;
    }
    int main()
    {
        int i,j,t,m;
        scanf("%d",&t);
        while(t--)
        {
            stack<Node>s;
            scanf("%d%d",&n,&m);
            init();
            for(i=0;i<m;i++)
            {
                scanf("%d%d%d",&node[i].l,&node[i].r,&node[i].v);
            }
            sort(node,node+m,cmp);
            int ret=0;
            for(i=0;i<m;i++)
            {
                int l1,l2;
                l1=find(node[i].l);
                l2=find(node[i].r);
                if(l1!=l2)
                {
                    pa[l1]=l2;
                    ret+=node[i].v;
                    s.push(node[i]);
                }
            }
        //    printf("%d
    ",ret);
            int flag=1;
            while(!s.empty())
            {
                Node temp=s.top();
                s.pop();
                int ans=kruskal(temp);
                if(ans==ret)
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
                printf("%d
    ",ret);
            else printf("Not Unique!
    ");
        }
    }
  • 相关阅读:
    MySQL 存储过程
    linux iptables 相关设置
    Ubuntu iptables 设置
    Mac OS 10.12
    解决:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
    go get golang.org/x/net 安装失败的解决方法!
    Ubuntu16.04
    Ubuntu16.04
    Ubuntu16.04
    在Ubuntu16.04里面安装Gogland!
  • 原文地址:https://www.cnblogs.com/sweat123/p/4681867.html
Copyright © 2011-2022 走看看