自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(21)
  • 收藏
  • 关注

原创 poj 1144 Network (无向图求割点)

#include#include#includeusing namespace std;vector vec[110];int dfn[110] , low[110],in[110];int n, step , sum ;void init(){ for(int i=0;i<110;i++) { dfn[i]=low[i]=in[i]=0; v

2012-08-31 15:13:55 1199

原创 poj 2117 Electricity (无向图割点去除后最大连通分支数)

题意:求去除一点后,形成的连通分支数的最大值。(使最多的网络不能跟原路线相连)顶点u是割项当且仅满足 (1) 或 (2)时:(1) 若u是树根,且u的孩子数 son>1 。因为没有u的后向边,以这些孩子为根的子树之间互不相连通,所以去掉u后将得到son个分支。(2)若u不是树根,且存在树边 ( u  ,  v ) 使low ( v ) >= dfn ( u )。low值说明

2012-08-29 11:44:39 3257

原创 poj 1523 SPF (无向图 求割项)

题意: 求有多少个割项,且每个割项被几个块所共有。代码:#include#include#include#define mm 1010using namespace std;vector vec[mm];int stack[mm] , low[mm] , dfn[mm] ,gd[mm];int top , step ,n , m ,xx;void init(){

2012-08-27 18:11:11 947

原创 hdu 3394 (无向图求块 判断环)

题意描述: 公园有n个景点,公园的管理员计划要建m条道路,并且安排一些形成回路的参观路径,如果一条道路可以被多条回路共用, 那么这条边是冲突边,如果一个块中有多个环,则该块中的每条边都是冲突边。 如果不能形成环的路则为不需要的边,现在就是求无向图中冲突边和不需要边的条数解题思路: 把图分为多个块,然后判断每个块里面的边数,如果块的边数

2012-08-27 15:56:11 1641

原创 poj 2186 Popular Cows (tarjan + 缩点)

题意 :n头奶牛,m组关系(a b代表a认为b受欢迎)。求最后有多少头奶牛所有奶牛都认为它受欢迎。思路:首先用tarjan算出连通分支数,将所有点都标上所属连通分支color。将每个分支看做一个点,若某点a受到另一点b联系,则说明该点a代表的连通分支中每个原始点都受到b中以及所有认为b受欢迎的点的欢迎,所以此处用dfs计算出每个分支中被多少人欢迎。代码(比较繁琐):#inc

2012-08-25 16:29:46 557

原创 hdu 2767 Proving Equivalences (tarjan + 缩点)

/*题目大意:给定一张有向图,问最少添加几条边使得有向图成为一个强连通图。解题思路:缩点后找入度为0的点和出度为0的点,统计个数,选择大的那个数就是答案。 如果出度为0的个数n比入度为0的个数m多,那添加n条边,从当前出度为0的点到 其他入度为0的点,肯定能成为强连通图,同理可得m大也可以。(各连通分支间 可能需要1条或2条,才能使两个连

2012-08-25 01:33:26 550

原创 hdu 1827 Summer Holiday (Tarjan算法)

#include#includeusing namespace std;int stack[1010],top ,size, step ,color;int in[1010],dfn[1010],low[1010];int rd[1010],price[1010],sum,num;struct E{ int v, next;}e[2010];int head[1010

2012-08-24 16:17:55 709

转载 Tarjan 算法

[有向图强连通分量]在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。下图中,子图{1,2,3,4}为一个强连通分量,因为顶点1,2,3,4两两可达。{5},{6}

2012-08-24 15:54:14 546

原创 coj 1509 Build the given towers

题意:给定一个左视图,要求给定的方块数能否垒成这么一个视图。方块数不要求全部用完。垒数不能超过W。 解答:此题我们采用贪心解决。由于W有限,如果没有黑色的‘b’,我们是可以只用一垒就摆出给定的视图。贪最少的垒,只有到出现奇数个连续的‘b’时,这是我们要将2*1*1的black块挡住一半,使得左视图只看到一个‘b’,这时才要新摆放一个垒。我们从后往前,从高往低摆放视图,至于需要用来作为垫

2012-08-24 09:52:39 602

原创 ccsu 1179 青蛙过河 递推

题目:有一条河,左边一个石墩(A区)上有编号为1,2,3,4,…,n的n只青蛙,河中有k个荷叶(C区),还有h个石墩(D区),右边有一个石墩(B区),如下图2—5所示。 n只青蛙要过河(从左岸石墩A到右岸石墩B),规则为: 1)石墩上可以承受任意多只青蛙,荷叶只能承受一只青蛙(不论大小); (2)青蛙可以:A→B(表示可以从A跳到B,下同),A→C,A→D,C→B,

2012-08-17 16:59:01 1946

原创 hdu 1827 Summer Holiday (强连通Kosaraju法)

题意: 输入n、m ,n表示人数和联系对数。联系不同人的花费不同,需要找到花费最少为多少。思路:找到强连通分支(标记同一分支中的点),然后每个分支中最多只需要联系一个人即可,但若两个分支中有联系则只需联系其中一个花费小的,即将每个分支看做一个点,找分支间的出、入度关系。#include#include#define size 1010#define INF 1000000000

2012-08-16 10:48:31 1582

原创 coj 1504 放置棋子(诸侯安置)dp

很久以前,有一个强大的帝国,它的国土成正方形状,如图2—2所示。 这个国家有若干诸侯。由于这些诸侯都曾立下赫赫战功,国王准备给他们每人一块封地(正方形中的一格)。但是,这些诸侯又非常好战,当两个诸侯位于同一行或同一列时,他们就会开战。如下图2—3为n=3时的国土,阴影部分表示诸侯所处的位置。前两幅图中的诸侯可以互相攻击,第三幅则不可以。 国王自然不愿意看到他的诸侯们

2012-08-16 10:20:54 2130

原创 hdu 1811Rank of Tetris (并查集+拓扑排序)

题意: n个队,m种描述(a>b 或 a=b 或 aa同时存在;②:存在环),信息是否不齐全(排名顺序有多种可能:某次入度为0的>1个。)思路: 由于当存在冲突和信息不全时,返回冲突。所以先用并查集将‘=’两边的点“并为一点”,即只用对其中一点进行排序,将他们的根节点赋值为相同。若后面‘>' 或 'a=b与aa同时存在;若该冲突则用拓扑排序将比分顺序排列出来(当排序过程中出现入度为0的个数某次

2012-08-13 15:54:26 924

原创 hdu 1285 确定比赛名次

题意:  拓扑排序,按字典序输出。  #include#include#include#includeusing namespace std;int n,m , top;int vis[510][510];int ans[510];struct E{ int v, next;}e[20010];struct N{ int head , dep ,

2012-08-13 10:52:13 672

原创 hdu 2647 Reward 拓扑排序

#include#include#include#define size 10010using namespace std;int n,m ,top ,ans;struct E{ int v,next;}e[size*2];struct EE{ int dep , rd , head;}node[size];void insert(int u , int v)

2012-08-10 18:03:46 568

原创 2489 Minimal Ratio Tree 最小生成树(选边)

题意: 给n个点及各点间的距离,从中选出m个点 ,使得  边权的和 / 点权的和  最小。思路: 从n个点中选出m个点(枚举每种可能的情况),计算出它的。。。最小值。所以可以用dfs枚举出各种情况,再用prime算出每种情况的。。。最小值。#include#include#define INF 999999using namespace std;int map[20][20

2012-08-10 10:29:04 863

原创 hdu 1997 汉诺塔VII

解题思路: 我们知道递归求汉诺塔步数时,了解首先我们要将A上的1~(n-1)个移到B上,然后将A上的第n大的移到C上,就完成了第一步。然后我们需要将B上的n-1个盘移到C上,可知现在可以将B看做之前的A,A看做B。现在,我们需要判断给出的状态是否为正确的移动(移动步数最短的移法)中的状态。因为递归求步数时,第二步可以实现必须是n已经移动到了C上,若n仍然在A上,则此时要求的就是将A上的

2012-08-08 16:37:58 3426

原创 POJ 1003 判断欧拉回路

题意:有N个房间,每个房间都有若干门通往相应编号的房间(这些开着的门都是由房子主人经过时打开的,所以说明这些房间一定是连通的。),问是否能从编号为M的房间出发,经过所有的房间把所有的门都关闭最后回到0号房间,同时关上的的门不能再被打开。思路:因为各个房间一定是连通的,所以判断是否能够一圈走完所有的路,则以房间为点,门为边的图必定是欧拉回路(有限图G是一条道路(即可以一笔画成)的充分必要条件是G

2012-08-07 16:13:06 4519

原创 BUY LOW, BUT LOWER

“逢低吸纳”是炒股的一条成功秘诀。如果你想成为一个成功的投资者,就要遵守这条秘诀:"逢低吸纳,越低越买"这句话的意思是:每次你购买股票时的股价一定要比你上次购买时的股价低.按照这个规则购买股票的次数越多越好,看看你最多能按这个规则买几次。给定连续的N天中每天的股价。你可以在任何一天购买一次股票,但是购买时的股价一定要比你上次购买时的股价低。写一个程序,求出最多能买几次股票。

2012-08-05 15:26:04 577

原创 ccsu 1090 积最大的整数分解

给你一个正整数N,试将其分解成若干个互不相同的正整数之和,使得这些互不相同的正整数之积最大。//想要积最大,则要保证n分解的数尽量小 #include#include#define size 100010using namespace std;int main(){ int n; int ans[size]; while(scanf("%d",&n)!=EO

2012-08-02 14:36:26 926

原创 hdu 1045Fire Net (建图 、二分匹配)

题意:需要求最大的放置炮台数(每个炮台都不能在其他炮台攻击范围内)。           炮台攻击范围是:该炮台所在的行和列,但是‘X'可以阻挡炮台攻击。思路:二分匹配必须要有两个互不关联的集合,所以可以将行和列看做两个集合,但是’X'可以阻挡攻击,即若一行中有‘X'则该行可能放2个炮台。所以,我们将每行和每列相连的’ . '作为一个点(标号一致),这样按照行或列形成的图中标号的个数即为各

2012-08-02 13:31:39 2865

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除