2012年8月19日
摘要: UVALive_4271 这个题目一开始把这个项链描述地既详细又神奇,但是后来仔细想一下,实际上只要S和T之间能够存在一条回路,即从S出发走到T再走回来,中途不经过重复的边,那么这条回路就可以看成是满足题目描述的项链。 想到这就好办了,为了保证路不重复用网络流就可以了,接下来就虚拟出一个源点S',连一条S'到S的容量为2的边,其余原图上的边容量都看成1,然后看S'到T的最大流是不是2就可以了。#include<stdio.h>#include<string.h>#include<algorithm>#define MAXD 10010 阅读全文
posted @ 2012-08-19 19:21 Staginner 阅读(210) 评论(0) 推荐(0) 编辑
摘要: HDU_1960 如果把每条路线看成一个点,然后如果在任务i完成之后可以赶去做任务j就连一条i->j的有向边,这样我们就得到了一个有向无环图,而题目相当于想用最少的路径覆盖玩所有的顶点,这样就把问题转化成了二分图最小路径覆盖问题。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 510#define MAXM 250010char b[10];int N, first[MAXD], e, next[MAXM], v[MAXM];int yM[MAXD], visy[MAX 阅读全文
posted @ 2012-08-19 18:51 Staginner 阅读(195) 评论(0) 推荐(0) 编辑
摘要: SGU_206 不得不说这个题目的思想太奇葩,一时间还是不能很理解…… 首先一个贪心的思路就是,石子路的d[i]一定是小于或等于c[i]的,而非石子路的d[j]是一定大于或等于c[j]的,如果我们用x[i]描述石子路谎报的增量那么有x[i]=c[i]-d[i],用y[j]描述非石子路谎报的增量那么有y[j]=d[j]-c[j],最后目标自然就是求sum{x[i]}+sum{y[j]}的最小值了。 接着考虑题目中给出的重要条件,即最后要让石子路形成最小生成树,那么对于任意一条非石子路,填加到最小生成树上就会形成一个环,如果这条非石子路d[j]比环上某条石子路的d[i]小的话,那么这条非石子... 阅读全文
posted @ 2012-08-19 15:56 Staginner 阅读(502) 评论(0) 推荐(0) 编辑