poj 1797(并查集)
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(并查集)的更多相关文章
- poj 1984 并查集
题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...
- POJ 2492 并查集扩展(判断同性恋问题)
G - A Bug's Life Time Limit:10000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- POJ 2492 并查集应用的扩展
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28651 Accepted: 9331 Descri ...
- POJ 3228 [并查集]
题目链接:[http://poj.org/problem?id=3228] 题意:给出n个村庄,每个村庄有金矿和仓库,然后给出m条边连接着这个村子.问题是把所有的金矿都移动到仓库里所要经过的路径的最大 ...
- poj 1733 并查集+hashmap
题意:题目:有一个长度 已知的01串,给出多个条件,[l,r]这个区间中1的个数是奇数还是偶数,问前几个是正确的,没有矛盾 链接:点我 解题思路:hash离散化+并查集 首先我们不考虑离散化:s[x] ...
- poj 3310(并查集判环,图的连通性,树上最长直径路径标记)
题目链接:http://poj.org/problem?id=3310 思路:首先是判断图的连通性,以及是否有环存在,这里我们可以用并查集判断,然后就是找2次dfs找树上最长直径了,并且对树上最长直径 ...
- POJ 3657 并查集
题意: 思路: 1.二分+线段树(但是会TLE 本地测没有任何问题,但是POJ上就是会挂--) 2.二分+并查集 我搞了一下午+一晚上才搞出来----..(多半时间是在查错) 首先 如果我们想知道这头 ...
- poj 2236 并查集
并查集水题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring& ...
- poj 1417(并查集+简单dp)
True Liars Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2087 Accepted: 640 Descrip ...
随机推荐
- 使用phpize增加php模块
一,phpize的好处 什么时候我们要用phpize呢?我们在安装php时: ./configure --prefix=/apps/product/php --with-config-file-pat ...
- Python基础之--常用模块
Python 模块 为了实现对程序特定功能的调用和存储,人们将代码封装起来,可以供其他程序调用,可以称之为模块. 如:os 是系统相关的模块:file是文件操作相关的模块:sys是访问python解释 ...
- 判断QQ是否在线
<html> <body> ggygygygy<br> <td><a href="http://wpa.qq.com/msgrd?V=1 ...
- Mysql分表和分区的区别、分库分表介绍与区别
分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这 ...
- oracle中的连接查询与合并查询总结
连接查询: 连接查询是指基于多张表或视图的查询.使用连接查询时,应指定有效的查询条件,不然可能会导致生成笛卡尔积.如现有部门表dept,员工表emp,以下查询因查询条件无效,而产生笛卡尔积: (各 ...
- ASP.NET中gridview获取当前行的索引值
在用GridView控件时,我们经常会碰到获取当前行的索引,通过索引进行许多操作.例如,可以获得当前行某一个控件元素:设置某一元素的值等等.下面结合实例介绍几种获得GridView当前行索引值的方法. ...
- Jquery 操作IFrame
使用jquery操作iframe 1. 内容里有两个ifame <iframe id="leftiframe"...</iframe> <iframe id ...
- 升级xcode7.0 第三方库不能用的解决方法(bitcode是什么鬼?)
升级完xcode,真机运行发现报错,第三方库错误,微信SDK,高德SDK都报错,如下: ‘/Users/**/Framework/SDKs/PolymerPay/Library/mobStat/lib ...
- 大数据BI积累
http://blog.csdn.net/wyzxg/article/category/535869 设计论文:http://www.doc88.com/p-3877368345851.html 自动 ...
- 关于Tchar
因为C++支持两种字符串,即常规的ANSI编码(使用""包裹)和Unicode编码(使用L""包裹),这样对应的就有了两套字符串处理函数,比如:strlen和w ...