摘要:
题目链接:http://acm.uestc.edu.cn/problem.php?pid=1511思路:我们可以等到这样的5个关系式:k=1:dsit[a]-dist[b]>=0&&dist[b]-dist[a]>=0k=2:dist[a]-dist[b]=0;k=4:dist[a]-dist[b]>=1;k=5:dist[a]-dist[b] 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 100200 8 #define inf 1 > 阅读全文
摘要:
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34902思路:首先是双连通缩点,然后就是搜索一下,搜索时要跳过连通分量的点的个数>=2的点,最后的答案是n*(n-1)/2. 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 11111 9 #define MAXM 444444 10 11 struct Edge{ 12 int... 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3760思路:首先是建反图,从点n开始做spfa求出n到各点的最短路,然后从1点开始搜最小序列,对于边(u,v),若dist[u]==dist[v]+1,则要将当前的序号加入当前队列中,然后就是对于那些序号相同点的都要加入当前队列,还要判一下重。至于为什么要建反图从n点开始求最短路,因为在搜最小序列的时候要保证一定能搜到n点。 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include 3 #includ 阅读全文
摘要:
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3912思路:二分覆盖直径,然后判断是否有冲突(即距离小于等于直径的不能使用同一频率),这样可以用二分图染色的办法判断,看是否能将整个图都染上色。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 #define MAXN 1444 9 #define inf 1que;32 for(int i=1;ilimit-eps)cont... 阅读全文
摘要:
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13349题目大意:有N个球队在同一个赛区,已知他们胜利的场数,还剩下的在赛区内的比赛数和跨赛区的比赛数的和,和在赛区内的比赛对阵矩阵。问,1号球队是否可以不小于其余球队胜利场数的最大值。感觉大牛的思路很好:先贪心一下,让1号球队赢得所有比赛,其余球队输掉所有跨赛区的比赛。如果此时有球队比1号球队胜利场次多,显然直接输出NO。否则,对于在同一赛区的比赛,我们这样构图。新增源点S,汇点T。对于每个点I,从S向I连一条容量为和1号球队胜利场数之差的弧。对于赛区内的每一个 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291思路:首先保留求出循环节,然后就是矩阵求幂了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 typedef __int64 ll; 7 #define MOD2 1000000007 8 #define MOD1 222222224 9 #define MOD0 18312010 11 /*12 暴力求循环节13 int main()14 {15 ll f0=0,f1=1;16 for... 阅读全文
摘要:
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=29821思路:首先拆点,每个字符对应的位置拆成i和i+len,然后源点和i连边,容量为1,花费为0,i+len与汇点连边,容量为1,花费为0,然后就是对于那些在P中的字符串连边,容量为1,花费为g[u][v],最后跑最小费最大流即可,然后答案就是len-flow,cost; 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include 3 #include 4 #inc 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4685思路:想了好久,终于想明白了,懒得写了,直接copy大牛的思路了,写的非常好!做法是先求一次最大匹配设为cnt,那么左边有n-cnt个王子还未匹配,右边有m-cnt个公主还未匹配,因此我们将左侧增加m-cnt个虚拟王子,虚拟王子与右边所有公主连边;右边增加n-cnt个虚拟公主,虚拟公主与左边所有王子连边,这样我们就得到一个两边各有M=n+m-cnt的二分图,且该二分图是一个完美匹配。也就是每个王子都有一个匹配的公主。现在,我们将每个王子匹配的公主向该王子喜欢的公主连边(建一个新图g),然后求g 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4496、思路:简单并查集应用,从后往前算就可以了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define MAXN 10100 7 #define MAXM 1001000 8 9 struct Edge{10 int u,v;11 }edge[MAXM];12 13 int n,m,ans[MAXM];14 int parent[MAXN];15 int Find(int x)16 {17... 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722思路:简单的记忆化搜索,留意一下A==0时的情况就可以了。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 typedef long long ll; 7 8 int digit[22]; 9 ll dp[22][12];10 11 ll dfs(int pos,int pre,int doing)12 {13 if(pos==-1){14 return pre==0;15 ... 阅读全文