prim

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define Min(x,y) (x<y?x:y)
#define Max(x,y) (x>y?x:y)
using namespace std;
#define gamma 0.5772156649015328606065120 //欧拉常数
#define MOD 100000007
#define inf 0x3f3f3f3f
#define N 205
#define maxn 10001000
typedef long long LL;
typedef pair<int,int> PII; int vis[],d[],pic[][],used[][],path[][];
int ans,n,pre[]; int prim()
{
for(int i=; i<=n; ++i) pre[i]=;
mst(vis,);
vis[]=;
int res=;
int i,j;
for(i=; i<=n; ++i) d[i]=pic[][i];
for(i=; i<n; ++i)
{
int m=inf,u;
for(j=; j<=n; ++j)
if(!vis[j]&&d[j]<m)
m=d[u=j];
res+=m;
vis[u]=;
used[u][pre[u]]=used[pre[u]][u]=;
for(j=; j<=n; ++j)
if(!vis[j]&&pic[u][j]<d[j])
{d[j]=pic[u][j];pre[j]=u;}
else if(vis[j]&&j!=u)
path[j][u]=path[u][j]=Max(m,path[j][pre[u]]);
}
int temp=inf;
for(int i=; i<=n; ++i)
for(int j=i+; j<=n; ++j)
{
if(!used[i][j])
temp=Min(temp,res+pic[i][j]-path[i][j]);
}
if(temp==res) return ;
ans=res;
return ;
} int main()
{
//freopen("in.txt","r",stdin);
int i,j,x,y,v,group,m;
scanf("%d",&group);
while(group--)
{
scanf("%d%d",&n,&m);
mst(path,);
mst(pic,inf);
mst(used,);
for(i=; i<m; ++i)
{
scanf("%d%d%d",&x,&y,&v);
pic[x][y]=pic[y][x]=v;
}
ans=;
if(prim()) printf("%d\n",ans);
else printf("Not Unique!\n");
}
return ;
}

kruskal:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
#define Min(x,y) (x<y?x:y)
#define Max(x,y) (x>y?x:y)
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 100000007
#define inf 0x3f3f3f3f
#define N 100005
#define maxn 1000050
typedef long long LL;
typedef pair<int,int> PII; int n,m,cnt,vis[6000],fp[105]; ///vis[]是标记第一次求mst时用过哪些边(后面枚举删边时用到)
struct Node{
    int x,y,v;
    bool operator<(const Node&a)const{
        return v<a.v;
    }
    Node(){}
    Node(int a,int b,int c):x(a),y(b),v(c){}
}node[6000];
int findp(int x){return fp[x]==x?x:fp[x]=findp(fp[x]);} int kus(int xx){ ///xx表示删除哪条边
    int res=0;
    for(int i=0;i<=n;++i)fp[i]=i;
    int num=1;
    for(int i=0;i<cnt;++i){
        if(i==xx)continue;
        int x=findp(node[i].x);
        int y=findp(node[i].y);
        if(x==y)continue;
        res+=node[i].v;
        fp[x]=y;
        if(xx==inf)vis[i]=1;
        if(++num==n)break;
    }
    if(num<n)return inf;
    else return res;
} int main(){
    int x,y,v,i,j,group,Case=0,m;
    //freopen("in.txt","r",stdin);
    scanf("%d",&group);
    while(group--){
        mst(vis,0);
        scanf("%d%d",&n,&m);
        cnt=0;
        while(m--){
            scanf("%d%d%d",&x,&y,&v);
            node[cnt++]=Node(x,y,v);
        }
        sort(node,node+cnt);
        int res=kus(inf),ans=inf;
        for(i=0;i<cnt;++i){
            if(vis[i])
                ans=Min(ans,kus(i));
        }
        if(ans==res)printf("Not Unique!\n");
        else printf("%d\n",res);
    }
    return 0;
}

次小生成树模板(poj1679)的更多相关文章

  1. poj 2831 次小生成树模板

    /*次小生成树 题意:给你一些路径,现在将一部分路径权值减少后问是否可以替代最小生成树里面的边. 解:次小生成树,即将这条边连上,构成一个环 求出任意两点路径之间的除了这条边的最大值,比较这个最大值& ...

  2. poj1679The Unique MST(次小生成树模板)

    次小生成树模板,别忘了判定不存在最小生成树的情况 #include <iostream> #include <cstdio> #include <cstring> ...

  3. POJ-1679 The Unique MST,次小生成树模板题

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K       Description Given a connected undirec ...

  4. POJ_1679_The Unique MST(次小生成树模板)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23942   Accepted: 8492 D ...

  5. poj 1679 The Unique MST (次小生成树模板题)

    Given a connected undirected graph, tell if its minimum spanning tree is unique. Definition 1 (Spann ...

  6. 次小生成树(poj1679)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20737   Accepted: 7281 D ...

  7. POJ 1679 The Unique MST 【最小生成树/次小生成树模板】

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22668   Accepted: 8038 D ...

  8. uva10600次小生成树模板题

    裸题,上模板就行,注意j  !  =  k #include<map> #include<set> #include<cmath> #include<queu ...

  9. POJ -1679(次小生成树)模板

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:34617   Accepted: 12637 D ...

随机推荐

  1. 转:【AI每日播报】从TensorFlow到Theano:横向对比七大深度学习框架

    http://geek.csdn.net/news/detail/139235 说到近期的深度学习框架,TensorFlow火的不得了,虽说有专家在朋友圈大声呼吁,不能让TensorFlow形成垄断地 ...

  2. 【CI】系列二:Ubuntu环境虚拟机安装及配置

    好了,做好了初步计划之后,如果可行性没问题,就可以开始实践了. 准备前提:VirtualBox.ubunut镜像 如果没有,可以通过如下地址下载,安装过程此处不做描述. VirtualBox 4.3. ...

  3. Redis 配置文件及命令详解

    ==基本配置 daemonize no 是否以后台进程启动 databases 16 创建database的数量(默认选中的是database 0) save 900 1 #刷新快照到硬盘中,必须满足 ...

  4. (三)Maven基本概念——常用插件的配置

    看注释———— pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

  5. Hibernate单向“一对多”关联

    1. 基于连接表的单向“一对多”关联,应该优先被采用其中指定many-to-many的unique="true",为单向“一对多”,不指定就是单向“多对多” <class n ...

  6. android-异步消息处理机制初步

    Android的异步消息处理主要由4个部分组成,Message.Handler.MessageQueue和Looper Message:在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程 ...

  7. es迁移索引数据合并

    es集群迁移,大规模迁移过程中,比如我们以当天时间做索引,在新的es集群会存在和老的es集群一样的索引文件名,这个时候用snapshot恢复数据会出现冲突问题.这里我们可以用reindex api来解 ...

  8. mysql 主库有数据通过锁库做主从

    master@localhost[(none)]> grant replication slave on *.* to 'repl'@'192.168.1.177' identified by ...

  9. ISA2006安装和部署基础(虚拟机非域环境)

    0x00. 为了測试基于HTTP隧道的绕过ISA,必须搭建模拟环境,为了不麻烦,我们这里不配合域环境认证.本次实验利用Vmware 10.0搭建好开发环境,实现ISA2006安装和部署,同一时候设定基 ...

  10. Atitit.eclipse comment  template注释模板

    Atitit.eclipse comment  template注释模板 1. Code templet1 1.1. Settpath1 1.2. 设置存储1 1.3. 导出设置1 2. Java d ...