poj2485&&poj2395 kruskal

题意:最小生成树的最大边最小,sort从小到大即可

poj2485

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 505
int map[maxn][maxn],pa[150000],num,n;
struct node
{
    int x;
    int y;
    int val;
}s[150000];
bool cmp(node a,node b)
{
    return a.val<b.val;
}
void init()
{
    int i,j;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            scanf("%d",&map[i][j]);
    for(i=1;i<=n;i++)
        pa[i]=i;
}
void makemap()
{
    int i,j;
    num=0;
    for(i=1;i<=n;i++)
        for(j=i+1;j<=n;j++)
        {
            s[num].x=i;s[num].y=j;s[num++].val=map[i][j];
        }
}
int find(int x)
{
    if(x!=pa[x])
        pa[x]=find(pa[x]);
    return pa[x];
}
void kruskal()
{
    int i,j,ans=0;
    sort(s,s+num,cmp);
    for(i=0;i<num;i++)
    {
        int l1,l2;
        l1=find(s[i].x);l2=find(s[i].y);
        if(l1!=l2)
        {
            pa[l1]=l2;
            ans=s[i].val;
        }
    }
    printf("%d\n",ans);
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        init();
        makemap();
        kruskal();
    }
    return 0;
}

poj2395

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define maxn 2002
int pa[maxn],num,n;
struct node
{
    int x;
    int y;
    int val;
}s[10010];
bool cmp(node a,node b)
{
    return a.val<b.val;
}
void init()
{
    int i;
    for(i=0;i<=n;i++)
        pa[i]=i;
}
int find(int x)
{
    if(x!=pa[x])
        pa[x]=find(pa[x]);
    return pa[x];
}
void kruskal()
{
    int i,j,ans=0;
    sort(s,s+num,cmp);
    for(i=0;i<num;i++)
    {
        int l1,l2;
        l1=find(s[i].x);l2=find(s[i].y);
        if(l1!=l2)
        {
            pa[l1]=l2;
            ans=s[i].val;
        }
    }
    printf("%d\n",ans);
}
int main()
{
    int i,j;
    while(scanf("%d%d",&n,&num)!=EOF)
    {
        init();
        for(i=0;i<num;i++)
            scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].val);
        kruskal();
    }
    return 0;
}
时间: 2024-08-28 01:13:36

poj2485&&poj2395 kruskal的相关文章

POJ2395 Out of Hay【Kruskal】

Out of Hay Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11656Accepted: 4562 Description The cows have run out of hay, a horrible event that must be remedied immediately. Bessie intends to visit the other farms to survey their hay situat

poj2485 kruskal与prim

Prime: #include<iostream> #include<cstdio> #include<algorithm> using namespace std; #define debug #if defined debug #define CDBG(format,...) printf("File: "__FILE__", Line: %05d: "format"\n", __LINE__, ##__V

poj2485(Kruskal)

这道题显然是一道最小生成树的问题,参考算法导论中的Kruskal方法,先对路径长度进行排序,然后使用并查集(Disjoint Set Union)来判断节点是否连通,记录连接所有节点的最后一条路径的长度即为最大的长度了. 下面的并查集算法还可以通过设置rank数组记录节点的等级来进一步优化.总的来说还是一道简单题. #include <cstdio> #include <algorithm> using namespace std; struct Edge{ int x, y; i

POJ-2485 Highways + POJ-1258 Agri-Net 【Kruskal】

整理板子的时候翻出来的题,放在一起写是因为都是Kruskal纯板子题. 1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #include<cmath> 6 #include<string> 7 #include<stack> 8 #include<queue> 9 #include<ve

poj2395 Out of Hay , 求MST的最长边

点击打开链接 求MST的最长边~ prim #include <cstdio> #include <cstring> #include <vector> #include <algorithm> #define Min(a,b) (a)<(b)?(a):(b) using namespace std; const int INF = 1000000000; const int maxn = 2000 + 5; struct pto { int v, l

poj2485

找最小生成树里面最长的边是多少,还是用kruskal做的.. #include<iostream> #include<algorithm> using namespace std; int father[501]; struct n1 { int s,e,w; }; n1 path[30000]; bool cmp(n1 a,n1 b) { return a.w<b.w; } int find(int i) { while(father[i]!=i) { i=father[i

整合:图论存图方法及三种重要做法分析(Kruskal Dijkstra Bellman-Ford)

一.最短生成路的2种存图方法(邻接矩阵和邻接表): 1)邻接矩阵(适合稠密图即边远远多于点): 1.时间复杂度一般在n^2: 2.可以解决重边情况:map[i][j] = min( map[i][j] , input); 3.初始化:a[i][j] = INF;  a[i][i] = 0; 4.邻接矩阵点的最大极限在3000左右 5.图示: 2)邻接表(适合疏密图即边数近似于点数): 1.时间复杂度一般在mlog(n): 2.数组实现邻接表: ①定义:每个节点i都有一个链表,里面保存着从i出发的

POJ-2485 Highways---最小生成树中最大边

题目链接: https://vjudge.net/problem/POJ-2485 题目大意: 求最小生成树中的最大边 思路: 是稠密图,用prim更好,但是规模不大,kruskal也可以过 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<queue> 7 #in

【BZOJ 3551】[ONTAK2010] Peaks加强版 Kruskal重构树+树上倍增+主席树

这题真刺激...... I.关于Kruskal重构树,我只能开门了,不过补充一下那玩意还是一棵满二叉树.(看一下内容之前请先进门坐一坐) II.原来只是用树上倍增求Lca,但其实树上倍增是一种方法,Lca只是他的一种应用,他可以搞各种树上问题,树上倍增一般都会用到f数组. |||.我们跑出来dfs序就能在他的上面进行主席树了. IV.别忘了离散. V.他可能不连通,我一开始想到了,但是我觉得出题人可能会是好(S)人(B),但是...... #include <cstdio> #include