题意,在给出的图中,使用最小花费的边,使这个图仍然连通。

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=10005;

int head[maxn];
int n,len=0,counter;
long long ans;
struct node{
    int v,cost,u;
	//操作符的重写默认是小于等于
    bool operator < (const node& tmp) const{
		return cost< tmp.cost;

}
}gra[maxn];
struct BingCha{
//并查集
    int father[105];
    void initial(){
	//初始化不要忘记
        for(int i=1;i<=n;i++){
            father[i]=i;
        }
    }
    int getfather(int v){
        if(father[v]==v)return v;
        return father[v]=getfather(father[v]);
	//状态压缩
    }
    bool findtwo(int a,int b){
	//看是否是同根的
        return getfather(a)==getfather(b);
    }
    void unioned(int a,int b){
        int fa=father[a],fb=father[b];
        father[fa]=fb;
    }
}jihe;
void addedge(int u,int v,int cost){
    gra[len].u=u;
    gra[len].v=v;
    gra[len].cost=cost;
    len++;
}
void init(){
    len=0;
    counter=1;ans=0;
    int x;
    memset(head,-1,sizeof(head));
//memset gra?
    for(int i=1;i<=n;i++){//add the edges
        for(int j=1;j<=n;j++){
                scanf("%d",&x);
                if(i<j){
                    addedge(i,j,x);
                }
            }
        }
    }

int main(){
    while(scanf("%d",&n)!=EOF){
        init();
        sort(gra,gra+len);
		//已经有序,那么从小值开始选边添加即可,也保证了最优结果
        int idx=0;
        jihe.initial();
        while(counter<n || idx<len){
            if(!jihe.findtwo(gra[idx].u,gra[idx].v)){
			//如果不同根,就选择这条边,执行更新操作
                ans+=gra[idx].cost;
                counter++;
                jihe.unioned(gra[idx].u,gra[idx].v);
            }
            idx++;
        }
            printf("%d\n",ans);

    }
}

  2421 也是裸的mst:只要把已经建了的作为输入先处理一下就好了。

 #include <cstdio>
 #include <algorithm>
 #include <cstring>
 using namespace std;
 ;

 int n,len,counter;
 long long ans;
 struct node{
     int v,cost,u;
     bool operator < (const node& tmp) const{
         return cost< tmp.cost;

 }
 }gra[maxn*(maxn-)>>];
 struct BingCha{
     ];
     void initial(){
         ;i<=n;i++){
             father[i]=i;
         }
     }
     int getfather(int v){
         if(father[v]==v)return v;
         return father[v]=getfather(father[v]);
     }
     bool findtwo(int a,int b){
         return getfather(a)==getfather(b);
     }
     void unioned(int a,int b){
         int fa=getfather(a),fb=getfather(b);
         father[fa]=fb;
     }
 }jihe;
 void addedge(int u,int v,int cost){
     gra[len].u=u;
     gra[len].v=v;
     gra[len].cost=cost;
     len++;
 }
 int findxy(int x,int y){

     if(x>y){int z=y;y=x;x=z;}
     ,id=;
     ;i<x;i++){
         id+=j--;
     }
     y-=x;// here!!!
     id+=y;
     return id;
 }
 void init(){
     len=;
     counter=;ans=;
     jihe.initial();
     int x,q,y;
 //memset gra?
     ;i<=n;i++){//add the edges
         ;j<=n;j++){
                 scanf("%d",&x);
                 if(i<j){
                     addedge(i,j,x);
                 }
         }
     }
     scanf("%d",&q);
     ;i<=q;i++){
         scanf("%d%d",&x,&y);
         ;
         if(!jihe.findtwo(gra[idx].u,gra[idx].v)){
             counter++;
             jihe.unioned(gra[idx].u,gra[idx].v);
         }
     }
 }

 int main(){
     while(scanf("%d",&n)!=EOF){
         init();
         sort(gra,gra+len);
         ;
         while(counter<n){//|| idx<=len
             if(!jihe.findtwo(gra[idx].u,gra[idx].v)){
                 ans+=gra[idx].cost;
                 counter++;
                 jihe.unioned(gra[idx].u,gra[idx].v);
             }
             idx++;
         }
             printf("%d\n",ans);

     }
 }

Agri Net POJ1258 && Constructing Roads POJ2421的更多相关文章

  1. HDU1102&&POJ2421 Constructing Roads 2017-04-12 19:09 44人阅读 评论(0) 收藏

    Constructing Roads Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) ...

  2. POJ2421 Constructing Roads

    Constructing Roads 这道题很水,就是一个裸的最小生成树,最不过把已经连接的节点的值再设为0. 代码: #include<cstdio> #include<cstri ...

  3. Constructing Roads——F

    F. Constructing Roads There are N villages, which are numbered from 1 to N, and you should build som ...

  4. Constructing Roads In JGShining's Kingdom(HDU1025)(LCS序列的变行)

    Constructing Roads In JGShining's Kingdom  HDU1025 题目主要理解要用LCS进行求解! 并且一般的求法会超时!!要用二分!!! 最后蛋疼的是输出格式的注 ...

  5. [ACM] hdu 1025 Constructing Roads In JGShining's Kingdom (最长递增子序列,lower_bound使用)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  6. HDU 1102 Constructing Roads

    Constructing Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. Constructing Roads (MST)

    Constructing Roads Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  8. HDU 1025 Constructing Roads In JGShining's Kingdom(二维LIS)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  9. hdu--(1025)Constructing Roads In JGShining's Kingdom(dp/LIS+二分)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

随机推荐

  1. 关于在DWZ使用ssh后台查询的几种方式

    1.查询所有记录,并以列表形式查询 DaoImpl public PageBean queryByPage(String hql, List<Object> listobj, int pa ...

  2. Windows VC++常见问题汇总

    1.warning C4996: 'setmode': The POSIX name for this item is deprecated. Instead, use the ISO C++ con ...

  3. TransparentBlt函数的使用注意事项

    今天客户需要在软件上需要添加一个自己公司的Logo,要求使用镂空透明的形式展现,本来以为很简单的工作没想到在MFC下这么复杂.Logo为BMP格式,白色背景. 以为和在按钮上显示控件差不多,先导入BI ...

  4. c++ algorithm 的用法

    1 , accumulate()template<class _II, class _Ty> inline_Ty accumulate(_II _F, _II _L, _Ty _V){fo ...

  5. HTML5之 Microdata微数据

    - 为何需要微数据 长篇加累版牍,不好理解 微标记来标注其中内容,让其容易识辨 - RDFa Resource Description Framework http://www.w3.org/TR/m ...

  6. Maven使用总结

    1.pom.xml文件中添加新的库 在中央仓库找不到你想要的jar的时候,可以在pom.xml中添加附加的库,语法如下 <repositories> <repository> ...

  7. Jquery 页面元素动态添加后绑定事件丢失方法,非 live

    代码1: 以此方法绑定的input框事件,在通过add按钮后用jquery绑定的事件 alert就会丢失 <input type="button" value="A ...

  8. php 操作数组 (合并,拆分,追加,查找,删除等)

    1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: array array_merg ...

  9. NVIDIA显卡设置提升MineCraft流畅度

    很喜欢MineCraft(我的世界)这款游戏.可09年Y450的配置现在看来有点弱,尽管将Y450的CPU升级至了2.8Ghz的T9600,内存升级至1066Mhz的4G双通道内存,硬盘更换为128G ...

  10. .NET平台一些概念

    1.什么是CLR CLR(Common Language Runtime)公共语言远行时,是一个可由多种编程语言使用的“远行时”.CLR的核心功能(比如内存管理.程序集加载.安全性.异常处理和线程同步 ...