http://poj.org/problem?id=1797

题意:就是从第一个城市运货到第n个城市,最多可以一次运多少货。

输入的意思分别为从哪个城市到哪个城市,以及这条路最多可以运多少货物。

思路:我觉得可以用floyd来做这道题,结果交上去就TLE了,不过时间复杂度为n3TLE看起来也是比较正常,毕竟数字大。

然后我就看到网上有人用并查集来做,不然以前我都没往这方面想过,然后就用并查集来做

用并查集的思路就是,首先,对每组数据按照重量由大到小进行排序。然后查找合并。当Find(n) == Find( 1 )时,那个数据的重量也就是答案。

因为每组数据都是由大到小进行排序了,当前的重量肯定是最小的,而加入这一组数据后,上面的式子就成立了,也就说明这是第一次连通。

 #include <stdio.h>
#include <string.h>
#include <stdlib.h> struct cm{
int x,y,weigh;
}s[]; int cmp(const void *a,const void *b)
{
return (*(cm *)b).weigh-(*(cm *)a).weigh;
} int belg[],m,n; int Find(int x)
{
int _x=x,_b;
while(belg[_x]!=_x)
_x=belg[_x];
while(x!=belg[x])
{
_b=belg[x];
belg[x]=_x;
x=_b;
}
return _x;
} int unio(int x)
{
belg[ Find( s[x].y ) ] = Find( s[x].x );
if( Find( ) == Find ( n )) return ;
return ;
} int main()
{
// freopen("in.txt","r",stdin);
int t,a=,ans;
scanf("%d",&t);
while( t-- )
{
scanf("%d%d",&n,&m);
a++;
for( int i = ; i <= n ; i++ )
belg[i]=i;
for( int i = ; i < m ; i++ )
scanf("%d%d%d",&s[ i ].x,&s[ i ].y,&s[ i ].weigh);
qsort(s,m,sizeof(s[]),cmp);
for( int i = ; i < m ; i++ )
if(unio(i))
{
ans = s[ i ].weigh;
break;
}
printf("Scenario #%d:\n%d\n\n",a,ans);
}
return ;
}

下面的是TLE了的Floyd(仅供参考,不敢确定正确性)

 #include <stdio.h>
#include <string.h> int n,m,graph[ ][ ]; int main()
{
// freopen("in.txt","r",stdin);
int t,a = ;
scanf("%d",&t);
while( t-- )
{
int b,c,d;
a++;
scanf("%d%d",&n,&m);
memset( graph , , sizeof( graph ) );
for (int i = ; i <= m ; i++ )
{
scanf("%d%d%d",&b,&c,&d);
graph[ b ][ c ] = d;
// graph[ c ][ b ] = d;
}
for( int k = ; k <= n ; k++ )
for( int i = ; i < n ; i++ )
for(int j = i+ ; j <= n ; j++ )
if( graph [ i ][ j ] > graph [ i ][ k ] && graph[ i ][ j ] > graph [ k ][ j ] )
if( graph[ i ][ k ] > graph [ k ][ j ] )
graph[ i ][ j ] = graph [ k ][ j ];
else
graph[ i ][ j ] = graph [ i ][ k ];
printf("Scenario #%d:\n%d\n\n",a,graph[ ][ n ]);
}
return ;
}

poj 1797(并查集)的更多相关文章

  1. poj 1984 并查集

    题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...

  2. POJ 2492 并查集扩展(判断同性恋问题)

    G - A Bug's Life Time Limit:10000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u S ...

  3. POJ 2492 并查集应用的扩展

    A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28651 Accepted: 9331 Descri ...

  4. POJ 3228 [并查集]

    题目链接:[http://poj.org/problem?id=3228] 题意:给出n个村庄,每个村庄有金矿和仓库,然后给出m条边连接着这个村子.问题是把所有的金矿都移动到仓库里所要经过的路径的最大 ...

  5. poj 1733 并查集+hashmap

    题意:题目:有一个长度 已知的01串,给出多个条件,[l,r]这个区间中1的个数是奇数还是偶数,问前几个是正确的,没有矛盾 链接:点我 解题思路:hash离散化+并查集 首先我们不考虑离散化:s[x] ...

  6. poj 3310(并查集判环,图的连通性,树上最长直径路径标记)

    题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...

  7. POJ 3657 并查集

    题意: 思路: 1.二分+线段树(但是会TLE 本地测没有任何问题,但是POJ上就是会挂--) 2.二分+并查集 我搞了一下午+一晚上才搞出来----..(多半时间是在查错) 首先 如果我们想知道这头 ...

  8. poj 2236 并查集

    并查集水题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...

  9. poj 1417(并查集+简单dp)

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2087   Accepted: 640 Descrip ...

随机推荐

  1. thinkphp系统常量与自定义常量

    ----------------------------------------Action中使用的系统常量 ----------------------------------------THINK ...

  2. Java操作Oracle

    public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...

  3. Mysql表分区几种方式

    自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) = 水平分区(根据列属性按行分)= 举个简 ...

  4. verilog阻塞与非阻塞的初步理解(三)

    下面这段源码是因为习惯不好,出现不正确波形的例子. module pwm_division(reset,clkin,clkout); input reset,clkin; output clkout; ...

  5. PhpStorm 快捷键

    不容易记住的: Ctrl + Shift + F  查找文本,在项目目录或指定的目录 Ctrl + Shift + R  查找文本并替换,在项目目录或指定的目录 Ctrl + E    打开最近关闭的 ...

  6. gradle providedCompile 与compile区别

    Gradle compile: 如果你的jar包/依赖代码 在编译的时候需要依赖,在运行的时候也需要,那么就用compile例如 : compile 'org.springframework.boot ...

  7. eclipse-4.4.2安装Groovy插件(其他版本eclipse可参考)

    步骤 : 1.启动eclipse,点击help -> Install New Software... 在弹出的窗口中点击:Add... Groovy插件的地址:http://dist.sprin ...

  8. Java-java中无符号类型的处理

    在Java中,不存在Unsigned无符号数据类型,但可以轻而易举的完成Unsigned转换. 方案一:如果在Java中进行流(Stream)数据处理,可以用DataInputStream类对Stre ...

  9. primefaces4.0基本教程以及增删改查

    最近试着用了用primefaces4.0,准备写一个基本的增删改查以及分页程序,但在写的过程中发现了很多问题,本想通过百度.谷歌解决,但无奈中文资料非常少,笔者在坑中不停的打滚,终于完成了一个有着基本 ...

  10. border边框的宽度/样式/颜色 全部值

    border 用emmet写border的时候, 缩写是:bd. 不是b, 也不是bdr: b会扩展成bottom, bdr 会扩展成 border-right, border的宽度: 1px 基本上 ...