上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 61 下一页
摘要: 题目链接:http://lightoj.com/volume_showproblem.php?problem=1026思路:Tarjan 算法简单应用。割边的特点:low[v]>dfn[u](v是u的子节点) 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 22222 8 9 struct Edge{10 int v,next;11 }edge[MAXN*22];12 13 int n,NE;14 int head[MAXN];15 16 void.. 阅读全文
posted @ 2013-09-24 20:24 ihge2k 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27115思路:有一个trick要注意:当情况为 2 x y 时,可以推出当y留下时,x也必须留下。然后就是后面的k个限制关系,我们可以3^(k)次方枚举,一旦找到符合条件的就return 。然后就是反向建图,拓扑排序找可行解。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 using namespace std; ... 阅读全文
posted @ 2013-09-24 19:37 ihge2k 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26961思路:u表示留下,~u表示离开,同理v,对于+u,-v,我们可以这样来定义:若u离开,则v必须留下,如v离开,则u必须留下,于是我们可以连边u+n->v,v+n->u,后面的同理。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 #define MAXN 20000 10 #defin... 阅读全文
posted @ 2013-09-23 21:29 ihge2k 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不在同一个图中的,于是我们可以用dfs染色的方法来判断是否存矛盾。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int map[111][111]; 9 int color[111];10 int n;11 vector >g;12 13 bool dfs(int u,int 阅读全文
posted @ 2013-09-22 15:36 ihge2k 阅读(469) 评论(0) 推荐(1) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2545思路:dist[u]表示节点u到根节点的距离,然后在查找的时候更新即可,最后判断dist[u],dist[v]的大小即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 101000 8 9 int n,m;10 int parent[MAXN];11 int dist[MAXN];12 13 int Find(int x)14 {15 if(x... 阅读全文
posted @ 2013-09-22 11:06 ihge2k 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33804、思路:和poj的一道题有点像,不过这道题图可能不连通,因此首先求边双连通分量,然后算每个连通分量的度数,显然叶子节点的度数为1,孤立点的度数为0,然后就是统计度数了,对于孤立点ans+=2,对于叶子节点,ans++。于是最后的答案就是(ans+1)/2了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #de... 阅读全文
posted @ 2013-09-20 22:22 ihge2k 阅读(513) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28972思路:spfa求出每个点到其余顶点的最短路(最短路上的每个点的val都小于等于起点的val),然后又二维数组dp来保存,最后询问的时候就是枚举中间点i了,min{dp[i][u]+dp[i][v]+cost[i]}; 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define inf 1 >g;17 int cos 阅读全文
posted @ 2013-09-20 19:26 ihge2k 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36707思路:根据题意拆点建图即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 2222 8 #define inf 1que; 38 que.push(vt); 39 while(!que.empty()){ 40 int u=que.front(); 41 ... 阅读全文
posted @ 2013-09-20 16:38 ihge2k 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4640思路:f[i][j]表示一个人状态i下走到j的最小花费,dp[i][j]表示i个人在状态j下的最下花费。首先我们可以一遍bfs求出f[i][j],然后通过f[i][j]得到dp[1][i],最后就是更新dp[i][j]了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define inf 1PP; 9 10 int map[20][20];11 int f[1que;19 .. 阅读全文
posted @ 2013-09-20 14:31 ihge2k 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430思路:由于只是8种颜色,所以标号就无所谓了,对起始状态重新修改标号为 12345678,对目标状态标号做相应的修改,先预处理出12345678到所有状态的路径,记录所有状态的pre值,直接输出即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 struct Node{ 10 char str[11]; 11 Node(... 阅读全文
posted @ 2013-09-20 11:01 ihge2k 阅读(970) 评论(0) 推荐(0) 编辑
上一页 1 ··· 9 10 11 12 13 14 15 16 17 ··· 61 下一页