图论
ijbuhv
这个作者很懒,什么都没留下…
展开
-
hdu1827Summer Holiday tarjan缩点
//给一个有向图,每个点都有权值,问最少需要几个起点和最少花费多少能将整个图遍历完//用tarjan缩点,然后找出所有入度为0的点#include#include#include#includeusing namespace std ;const int maxn = 1010 ;const int inf = 0x7fffffff ;vector vec[ma原创 2015-06-21 14:20:21 · 674 阅读 · 0 评论 -
hdu4612Warm up tarjan+树形dp
//给一个连通无向图//定义去除一条边即能使得一个点与其他点不连通的边为桥//问加一条边后最少有几个桥//用tarjan对该无向图进行缩点//由于该无向图是一个连通图,所以缩点后其为一棵树,数的节点个数为num//该树的所有边都是桥//要加一条边使得桥最少,只需要将这条边加在这棵树的直径r的两个端点上//即最终的最少桥的个数为num-1-r#include#in原创 2015-06-21 19:11:55 · 477 阅读 · 0 评论 -
hdu2422考研路茫茫——空调教室 tarjan+树形dp
//给一个无向图,其每个顶点都有权值,求去掉一条边,将这个图分为两部分//问这两部分的所有顶点和的绝对值的最小值//用tarjan缩点 , 缩点后为一棵树//然后用树形dp求出其最小的绝对值// ans = min(ans , (int)(abs((double)(sum - 2*dp[v])))) ;//其中dp[u] 表示以u点为根节点的子树的学生数#include原创 2015-06-22 13:38:44 · 974 阅读 · 0 评论 -
hdu4738Caocao's Bridges tarjan求无向图的桥
//给一个双连通图,删除一条边能使得图不连通//问删除的桥的最小权值//只需要求其桥的最小权值就行#include<cstdio>#include<cstring>#include<iostream>using namespace std ;const int maxn = 1e6 + 10 ;const int inf = 0x7fffffff ;struct Edge{原创 2015-07-28 09:56:16 · 533 阅读 · 0 评论 -
hdu4005The war tarjan缩点
//给一个连通无向图,加上一条边需要删除一条边,使得这个图不连通//删除边需要花费钱,问最少需要准备多少钱使得不论加什么边最终都可以最终删除一条边使得原图不连通//所需要删的边一定是桥,所以先进行缩点使得其变为一棵树//在一棵树上加一条边后使得其有一个环,删除这个环的边后其依然连通//最坏的情况权值最小的边在这个环中,而且其必然是连接两个叶子节点,这样使得环覆盖的边尽量多//所以可以以权值原创 2015-08-08 16:35:31 · 752 阅读 · 0 评论 -
poj2186Popular Cows tarjan缩点
//n个奶牛,//A B 表示A认为B出名,而且其有传递性//如A认为B出名,B认为C出名,那么A认为C出名//问有多少头奶牛所有的奶牛都认为其出名//先对这个图缩点,记录每一个缩点的个数,然后找出度为0有且只有一个点//如果是,那么那个点缩了几个点就是答案#include<cstdio>#include<cstring>#include<iostream>#include<vec原创 2015-08-09 13:11:54 · 749 阅读 · 0 评论 -
poj3207Ikki's Story IV - Panda's Trick tarjan缩点
//给一个有向图,每个点都有权值(可能有负权),从任意起点遍历一遍这个图,//走每一点都可以选择得到和不得到这个权值,问最多能得到多少权值//先用tarjan进行缩点,得到一个森林,从这个森林的每棵树的根节点开始//dfs搜一遍得到最大的一条路#include<cstdio>#include<cstring>#include<iostream>#include<vector>usin原创 2015-08-09 16:23:17 · 521 阅读 · 0 评论 -
poj3592 Instantaneous Transference tarjan缩点+建图
//给一个n*m的地图,坦克从(0 , 0)开始走//#表示墙不能走,*表示传送门可以传送到指定地方,可以选择也可以选择不传送//数字表示该格的矿石数,//坦克从(0,0)开始走,只能往右和往下走,//问最多能得到多少矿石//直接建图,但由于有传送门,需要缩点//然后用dfs直接搜一条权值最大的路#include<cstdio>#include<cstring>#include<i原创 2015-08-10 09:38:25 · 634 阅读 · 0 评论 -
poj3177Redundant Paths tarjan缩点
//给一个连通图,问最少需要添加多少条边才能使得//任意两个点都有两条不同的路走到//对于一个强连通分量的所有任意两点都能有两点可以到达//先用tarjan缩点,缩点以后就是一棵树,对于这个树考虑有几个//叶子节点 ans = (leaf+1)/2#include<cstdio>#include<cstring>#include<iostream>using namespace st原创 2015-08-10 12:25:50 · 610 阅读 · 0 评论