上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 61 下一页
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4284思路:类似于poj3311:http://poj.org/problem?id=3311,首先floyd预处理出两点之间的最短距离,然后就是枚举所有的状态了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 111 7 #define inf 0x3f3f3f3f 8 9 int map[MAXN][MAXN];10 int dp[1=0)dp[(1=0){62 ... 阅读全文
posted @ 2013-08-29 20:27 ihge2k 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001思路:这道题类似于TSP问题,只不过题目中说明每个城市至少要走一次,至多走2次,因此要用到三进制压缩,然后就是状态转移方程了:dp[i+State[k]]=min(dp[i+State[k]],dp[i][j]+map[j][k]); 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define inf 0x3f3f3f3f 7 int State[12]; 8 int visited[60000][1 阅读全文
posted @ 2013-08-29 19:13 ihge2k 阅读(908) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4568思路:先用spfa预处理出宝藏与宝藏之间的最短距离,宝藏到边界的最短距离,然后就是经典的求TSP过程了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 222 8 #define inf 1 >que; 29 que.push(make_pair(point[num].x,point[num].y)); 30 if(dist... 阅读全文
posted @ 2013-08-29 17:05 ihge2k 阅读(732) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4067思路:很神奇的建图,参考大牛的:如果人为添加t->s的边,那么图中所有顶点要满足的条件都是一样的了,我们以此为目的来建图。对于每条边,我们只有两种操作,要么保留要么删除,那么先假设两种操作都能满足条件,我们就可以选择花费小的操作来执行,最后再根据实际情况调整。首先不加入任何边,在添加或删除(不加入)边的过程中,对每个顶点v记录in[v]为其当前入度,out[v]为其出度,sum为当前的总花费。那么对于每条边,如果au,流量1,费用为b-a(如果删除这条边的费用)如果bv,流量1,费用为a 阅读全文
posted @ 2013-08-29 12:38 ihge2k 阅读(898) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4322思路:建图真的是太巧妙了!直接copy大牛的了:由于只要得到糖就肯定有1个快乐度,在这一点上糖的效果是等效的。所以只要考虑有特殊效果的糖的分配就可以了。当快乐的程度超过b[i]时,多出来的部分就浪费了,为了使浪费尽可能少,我们用费用流加以控制,当获得最大费用最大流的时候,这是的费用的利用率就是最高的。在建图时只需考虑特殊的糖就可以了,建图方法:原点到每个糖:流为1,费用为0。如果糖对某个人有特殊效果,连边:流为1,费用为0。人向汇点连边:最终快乐的程度不超过b[i]的情况:流为b[i]/k,限 阅读全文
posted @ 2013-08-28 21:15 ihge2k 阅读(1122) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4411思路:这道题建图比较难想,首先是建立超级源点和超级汇点,那么由于有K个警察,于是vs与0连边,容量为k,费用为0,因为这K个警察不一定都出去,也就是不一定是最大流,于是0和vt连边,容量为k,费用为0。然后就是拆点建图了:(1):0到i连边,容量为1,费用0到i的最短路,表示去抓城市i的小偷。(2):从i到i+n,容量为1,费用为-1000000(很小的负权),这样可以保证每个城市都能遍历到。(3):对于城市i,j,(i 2 #include 3 #include 4 #include ... 阅读全文
posted @ 2013-08-28 17:04 ihge2k 阅读(444) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2485思路:题目的意思是删除最少的点使1,n的最短路大于k。将点转化为边,容量为1,费用为0,然后就是对于那些有道路的城市之间连边,若(u,v)有边,则连边(u+n)->v,容量为inf,费用为花费的时间1,然后就是跑最小费了,若dist[vt]>k,则返回false,最后输出的flow就代表要删除的点的个数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define M 阅读全文
posted @ 2013-08-28 12:28 ihge2k 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4289思路:求最小花费,最小割应用,将点权转化为边权,拆点,(i,i+n)之间连边,容量为在城市i的花费,然后就是若u,v之间有路,则连边(u+n,v),(v+n,u).最后就是跑最大流了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 444 8 #define MAXM 44444444 9 #define inf 1que; 39 ... 阅读全文
posted @ 2013-08-28 10:49 ihge2k 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=1419思路:只怪数据太弱!直接爆搜,按顺序搜索即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 int n,m,max_num; 9 vector >G;10 11 int color[111];12 int ans[111];13 14 void dfs(int num,int count)15 {16 if(num==n+1){17 if(count>max_num){18 ... 阅读全文
posted @ 2013-08-27 19:56 ihge2k 阅读(537) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3680思路:因为N 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 444 8 #define MAXM 444444 9 #define inf 1que; 42 que.push(vs); 43 while(!que.empty()){ 44 int u=que.front(); 45 que.pop(); 46 mark[u]=fa... 阅读全文
posted @ 2013-08-27 16:51 ihge2k 阅读(201) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 61 下一页