摘要: 这题的题意很明显,就是求MST然后每次改变一条边(只会变大),然后再求MST,在变下一条变之前,这条边又会变回原来的值,最后的答案就是每次的MST值除以改变的次数。首先要先求MST,存图时要用邻接矩阵,因为是稠密图。。。然后进行树形DP,这棵树要用已经求出的MST建立。当前节点为I,那么用f[i][j]表示以i为根的子树中到J点的距离最小值是多少,显然这个J不能是I的子树中的点,那么我们可以把一开始的邻接矩阵中a[i][i] 的值标记为-1,那么如果J为I子树中的点,一定有f[i][j] == -1,这样我们就可以进行转移了。对q个查询,若改变的边是MST中的边,两端点为x、y,权值改为z,假 阅读全文
posted @ 2014-03-11 20:39 Mosudas 阅读(388) 评论(0) 推荐(0) 编辑
摘要: 题意是在一个联通的无向图中切断两条边使其不连通,求切边的放法数。。。具体参加曹钦翔神犇的神论文吧http://www.docin.com/p-52577984.html 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 const int maxn = 2005; 9 const int maxm = 200005; 10 int nume,ct,n,m; 11 int g[maxn]; 12 int dfn[maxn]; 13 int s[ma... 阅读全文
posted @ 2014-03-09 00:35 Mosudas 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 无固定根的最小树形图。。。虚拟一个节点(0号节点),其到其余N个点的边权都为所有M条边的权值和(sum)+1,然后以此为Root跑朱刘算法,最后判断连接到0号节点的节点数目是不是1,若是1输出输出ans - sum - 1,否则无解。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 using namespace std; 12 #define ll long long 13 #define pb ... 阅读全文
posted @ 2014-03-04 23:41 Mosudas 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 最近刚学的最小树形图,终于AC了。。。朱刘算法,详细的可以到这里看http://www.zlinkin.com/?p=63注意一下自环就可以了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 using namespace std; 12 #define ll long long 13 #define pb push_back 14 //const double eps = 1e-8; 15 con... 阅读全文
posted @ 2014-03-04 22:52 Mosudas 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 差分约束的思想,虽然很长时间没写了。。。用d[i]表示区间[0..i]选的个数,那么对于给出的每个区间有d[b[i]] - d[a[i] - 1] >= c[i],此外还有隐藏约束条件0b[i],权为c[i]。对每个节点i连边i——>i+1,权为0;i+1——>i,权为-1,应用spfa跑最长路。在得出最长路的图中,一定满足上述两个约束条件,那么此时d[n]就代表了满足上述所有约束条件的最小选取个数。#include#include#include#include#include#include#include#include#include#includeusing nam 阅读全文
posted @ 2014-03-03 23:35 Mosudas 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 引用discuss里的一句话,好辣的一道题目。。。一定要注意认识的关系不是互相的,先建图,把不是互相认识的人连边,然后二分图染色,把原图分成m个块,再用类似背包的东西分f[i][j][k]表示前i个块,team1有j个人,team2有k个人能否实现,注意记录一下路径,然后递归输出就可以了,题目不算很难,但是细节比较多,涉及到的东西也挺多,挺容易出错的。。。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include ... 阅读全文
posted @ 2014-03-03 12:43 Mosudas 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 最大流最小割定理的应用添加源点(src)与汇点(sink)由于P是偶数,那么对于点i与j,若gcd(x[i] ^ y[i] ^ x[j] ^ y[j],p) > 1,则可共存,可将点集分为两个集合a,b(二分图),a中点的x与y坐标同奇同偶,y中点的坐标一奇一偶,src与a中点连x[i] & y[i]的边,b中点与sink连x[i]&y[i]的边。若两点不能共存(该两点一定一个在a一个在b),连INF=max的边。求出最小割,ans=sum-maxflow(). 1 #include 2 #include 3 #include 4 #include 5 #include 阅读全文
posted @ 2014-03-03 10:00 Mosudas 阅读(147) 评论(0) 推荐(0) 编辑