Graph
文章平均质量分 73
unixcsir
Coding Every Day~
展开
-
fzu_2090_旅行社的烦恼
// 找出无向图中的最小环,这里要深入理解floyd的运行原理// 无向图中的环需要3个结点判断// 设k是一个环中的编号最大的元素,那么连接k的两个结点设为i,j// 那么这个环的长度为dis[i][k]+dis[k][j]+min_dis[i][j];// 而且floyd的最外一层循环运行完之后保证了k-1之间的顶点// 的最短路已经确定了,这里需要注意溢出的问题#include原创 2012-10-10 16:42:04 · 539 阅读 · 0 评论 -
hdu_1325_Is It A Tree?(DFS)
題意:判斷輸入的數據是否是一棵有向樹分析:1.n個節點,n-1條邊2.從root開始做一次DFS即可,當從root開始做了一次DFS之後還有沒有訪問到的頂點,那麼這就是不符合要求Code:#include #include #include #include #include #include #include #include #inclu原创 2013-04-09 08:21:47 · 491 阅读 · 0 评论 -
hdu_1272_小希的迷宮(並查集)
題意:略分析:由於是無向圖且是一棵樹,也就是n個節點,n-1條邊,題目要求是每個定點都是雙連通,也就是所有頂點都在一個強連通分量裏面,這裏可以使用求SSC的算法,但是由於十無向圖使用並查集的變成複雜度降低了很多,trick:0 0 -> No.Code:#include #include #include #include #include #include #include原创 2013-04-09 07:57:35 · 448 阅读 · 0 评论 -
hdu_1102_Constructing Roads(最小生成樹)
題意:給你一個帶權圖其中有一些道路已經建設完畢,求其最小生成樹分析:對於已經建設完畢的道路修改其費用爲0,然後使用Prim或者Kruskal都可以Code:Prim#include #include #include #include #include #include #include #include #include #include #include #i原创 2013-04-09 09:09:12 · 467 阅读 · 0 评论 -
hdu_1856_More is better(並查集)
題意:給你m個關係,有A->B, B->C --> A->C,問最聚成一團的人數的最多的人數是多少分析:無向圖,並查集,m = 0的時候應該輸出1.Code:#include #include #include #include #include #include #include #include #include #include #include #inclu原创 2013-04-09 08:40:44 · 427 阅读 · 0 评论 -
HDU_1213_How Many Tables(並查集)
題意:給出N個人的M個關係,如果A認識B,B認識C,那麼C認識A,ABC三個人就可以安排在一起,問題給出M個關係之後,存在多少個圈子,使得圈子內的人全部認識。分析:使用並查集這數據結構在很好的時間複雜度內解決該題目Code:#include #include #include #include #include #include #include #include #原创 2013-04-08 21:53:55 · 444 阅读 · 0 评论 -
uva_10617_Again Palindrome(普通DP, 记忆化搜索)
这里的阶段就是按照字符串的顺序的方向进行规划每个阶段的状态dp[i][j] 表示字符串中从第i个字符到第j个字符回文串的个数 dp[i+1][j-1]+cost str[i] = str[j]状态转移: dp[i][j] = dp[i+1][j-1]dp[i][j] 是枚举i到j的所有可能,还有的是要注原创 2012-11-23 10:13:38 · 264 阅读 · 0 评论 -
uva_10285 Longest Run on a Snowboard
dp+记忆化搜索#include #include #include using namespace std;#define DIR 4#define MAXN 101int dir[][2] = { {0, 1}, {0, -1}, {-1, 0}, {1, 0}};int h[MAXN][MAXN], dp[MAXN][MAXN], row,原创 2012-11-05 19:28:45 · 260 阅读 · 0 评论 -
poj_1088_滑雪
经典dp问题/记忆化搜索状态:rst[x][y] 表示从坐标x,y开始获得的最大长度状态转移方程:rst[x][y] = max(rst[xi][yi])+1; 其中xi,yi为达到x,y的合法坐标#include #include #include using namespace std;#define DIR 4#define MAXROW 101#define原创 2012-10-25 17:28:46 · 270 阅读 · 0 评论 -
poj_1125_Stockbroker Grapevine
简单的folyd,题意为:给定一个有向图,要求从那个点开始,获得的最少时间,输入起始点和所需要的最少时间。#include #include #include using namespace std;#define MAXN 101int map[MAXN][MAXN];void folyd(const int &n){ for(int k = 1; k原创 2012-10-25 21:33:02 · 250 阅读 · 0 评论 -
uva_10003 Cutting Sticks
这里的根据矩阵连乘的原理一样dp[i][j] = min(dp[i][k]+dp[k][j]+len[i,j]);由于状态表示比较复杂,果断使用记忆化搜索ok,一开始开数组1000*1000超时了,当时一面茫然..然后仔细想想,可以把数组开成50*50的,0.3s Accepted.状态没有减少估计是这里的测试数据case 太多了,主要的时间是使用在dp数组的初始化了#include原创 2012-10-29 22:07:34 · 237 阅读 · 0 评论 -
uva_103_Stacking Boxes
想清楚了其实就是一个DAG图的最长路径问题,白书上有详细说明,能嵌套的加一条边,然后记忆话搜索,求出DAG上的最长路径,然后回溯输出路径。#include #include #include using namespace std;#define MAXN 35#define MAXD 11int map[MAXN][MAXD], mark[MAXN][MAXN],原创 2012-10-28 15:10:33 · 364 阅读 · 0 评论 -
fzu_2087_统计树边
//先对边进行排序,把相同权值的分为一组//然后根据贪心性质进行选择#include #include #include using namespace std;#define MAXN 100001#define MAXM 100001struct Edge { int u, v, w;}edge[MAXM];int root[MAXN];原创 2012-10-11 09:46:09 · 544 阅读 · 0 评论 -
hdu_1272_小希的迷宫
// 此题首先得判断顶点数目是否等于边数目+1// 其次是使用并查集判断图的连通性// 此题有一个陷阱,就是输入0 0的时候输出Yes#include #include #include using namespace std;#define MAXN 100001struct Node { int u, v;}node[MAXN];int root原创 2012-10-10 18:25:42 · 298 阅读 · 0 评论 -
LA_3902 - Network
題意:一個樹狀網絡,指定一個服務器s,一個距離k,與服務器相距爲k的節點都能被服務到,問服務整個網絡最少要增加多少臺服務器分析:這個網絡是無向的,轉成有向的比較好處理,題目給定了一個服務器,可以以這個點爲Root,把這個樹狀網絡變爲有向,然而比較優先的策略是從深度最深的葉子節點開始算距離爲k的位置放置一個服務器,然後更新覆蓋點,這裏只需要處理葉子節點,爲什麼? 因爲,如果葉子節點能被覆蓋的話原创 2013-04-11 19:24:27 · 412 阅读 · 0 评论