图论
文章平均质量分 75
hcy
这个作者很懒,什么都没留下…
展开
-
POJ 1861 Network
最小生成树是满足条件的一种树,并不是唯一解调用qsort后数组从零开始计数。。。被这个搞死了 #include#include#include #include #include using namespace std;int parent[15001];int k;struct edge{ int u,v,w;} edges[15原创 2011-11-15 21:06:57 · 210 阅读 · 0 评论 -
poj 1364 King
本题构造s[x]=a[1]+a[2]+a[3]+…+a[x]则a[i]+…+a[i+n]=s[i+n]-s[i-1]此后用bellman-ford需要构造超级源点 #include#include#include#include#includestruct edge{int u,v,w;}edges[500001];char ch[100];原创 2011-11-22 20:35:47 · 242 阅读 · 0 评论 -
最短路径
POJ 1201 Intervals 差分约束系统设S(i)为 0..i-1 中在最终序列中的的整数个数。则约束条件如下:S(b)-S(a) >= c0 S(i+1)-S(i) >= 0; S(i)-S(i+1) >= -1注意本题要求的是最小值, 而按照>=号建图后发现图中有负环, 怎么办呢?其实很简单, 本题求的转载 2011-11-17 19:36:06 · 246 阅读 · 0 评论 -
poj 3169 Layout
今天才知道差分约束这种神奇的东西但三角不等式还是不熟 构造时错了很多次#include#include#include#include#includestruct edge{ int u,v,w;}edges[500000];int dist[1001];int main(){ int n,ml,md,m; scanf(原创 2011-11-18 23:02:06 · 230 阅读 · 0 评论 -
poj 3259 Wormholes(Bellman-Ford)
题目一直很迷茫直到看到别人写的题目大意才知道普通路径是双向的,而虫洞就是负权值的边剩下的就是判断负权值回路 #include#include#include #include #include #include using namespace std;struct edge{ int u,v,w;}edges[50000];i原创 2011-11-18 18:06:21 · 294 阅读 · 0 评论 -
poj j2031(几何+最小生成树)
计算各球心的距离,小于半径之和的算0,简单的几何计算+kruskal 注意double的快排调用时 wa了n次 #include#include#include #include #include using namespace std;int parent[10000];int k;struct edge{ int u,原创 2011-11-17 17:55:33 · 294 阅读 · 0 评论 -
poj 2485 Highways
依旧是最简单的最小生成树这次用prim去写(万恶的Presentation Error) #include#include#include #include #include using namespace std;int flag[501];int f[501][501];int main(){ int T;int min[50原创 2011-11-17 19:30:59 · 176 阅读 · 0 评论 -
最小生成树
Kruskal用并查集实在是太爽了 zoj 1542 / poj 1861:ACzoj 1718 / poj 2031:ACpoj 2421: ACpoj 1258: ACpoj 3026:poj 2485:AC原创 2011-11-15 19:13:07 · 178 阅读 · 0 评论 -
poj 2421 Constructing Roads
给定部分路径后的最小生成树注意给的路径有可能构成回路 #include#include#include #include #include using namespace std;int parent[6001];int k;int f[6000][6000];struct edge{ int u,v,w;} edges[600原创 2011-11-17 18:50:21 · 237 阅读 · 0 评论 -
poj 1259 Agri-Net
kruskal 基础题 #include#include#include #include #include using namespace std;int parent[5000];int f[101][101];int k;struct edge{ int u,v,w;} edges[5000];int compare(const void *a, co原创 2011-11-17 11:23:29 · 472 阅读 · 0 评论 -
POJ 1611 The Suspects
题目大意:给你几个同学的集合,0为传染源,和他同组的都被传染,问有多少人被传染 最简单的并查集结果忘了 if (rr1==rr2) returnRE了两次#include#includeint parent[30001];int k;int findset(int x){ int tmp,s; s=x; while (parent[s]>=0原创 2011-11-15 16:37:53 · 174 阅读 · 0 评论 -
并查集
根据Slyar的博客并查集三个基本函数:make find union两个优化:find的时候进行状态压缩,union时将数量少的并到数量多的集合上 find 递归版本:int Find_Set(int x){ if (x != parent[x]) { parent[x] = Find_Set(parent[x]); } return parent[原创 2011-11-15 16:42:38 · 192 阅读 · 0 评论 -
POJ 2524 Ubiquitous Religions
题目大意:n个人,给定m对人宗教信仰相同,问最多有多少种宗教信仰。 和1611没多大区别因为本题不需要考虑每个集合的个数,可以将parent负值简化,但我太懒了,不想改了。#include#includeint parent[50001];int t;int findset(int x){ int tmp,s; s=x; while (paren原创 2011-11-15 17:13:39 · 187 阅读 · 0 评论 -
poj 2983 Is the Information Reliable?
等号的情况可以转换成不等式a=b 就可以表示成a>=b b>=a 约束条件写出来就用bellman-ford需要注意的是要构造超级源点 #include#include#include#include#includestruct edge{int u,v,w;}edges[500001];char ch[100];int dist[1原创 2011-11-21 20:52:39 · 344 阅读 · 0 评论