很妙的一道题. 由于本人过于zz,不会这道题,通过厚颜无耻翻阅题解无数终于懂了这道题,所以这里转载一位神仙的blog. 没有看懂?没事,再来一篇. 这题个人认为主要在于转化题意和建图,这两点想通了应该就不难了. 转化题意:每个长只要互不相等即可,不管什么严格大于. 建图:限制了每个长只能被选一次,另一边作为价值.有没有条件限制感觉和上一篇博客相像?长和宽代表的两个点之间建一条边,从长到宽的方向代表以长为底,反向则以宽为底.然后限制每个点出度最多为1. 图建出来,我们只要定向时满足每个点至多出度为…
4886: [Lydsy1705月赛]叠塔游戏 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 198  Solved: 76[Submit][Status][Discuss] Description 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的 长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它的长度要严格大 于它上边的任意一个矩形的长度.塔的高度…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4886 [题解] 跟bzoj4883:http://www.cnblogs.com/galaxies/p/bzoj4833.html很相似啊 我们对于a,b离散后建点,那么一个卡片就相当于a到b有一条边. 现在要给边定向,使得每个点入度均为1. 贡献=每个点出度*该点权值 bzoj4883的时候谈过,这样的连通块要么是环套树要么是树. 肯定都有的一部分贡献是(deg[i]-1)*a[i](总…
4883: [Lydsy1705月赛]棋盘上的守卫 Time Limit: 3 Sec  Memory Limit: 256 MBSubmit: 475  Solved: 259[Submit][Status][Discuss] Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个守卫,一个守卫 不能同时兼顾行列的防御.请计算控制整个…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4883 [题目大意] 在一个n*m的棋盘上要放置若干个守卫. 对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说, 每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的, 且每个位置最多只能放置一个守卫,一个守卫不能同时兼顾行列的防御. 请计算控制整个棋盘的最小代价. [题解] 我们将每行和每列看成一个点,用每个格子上的点的权值作为边, 这就构成了一个n+m个点的图…
题目描述 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个守卫,一个守卫不能同时兼顾行列的防御.请计算控制整个棋盘的最小代价. 输入 第一行包含两个正整数n,m(2<=n,m<=100000,n*m<=100000),分别表示棋盘的行数与列数. 接下来n行,每行m个正整数 其中第i行第j列的数w[i][j](1<=w[i][j]<=10…
题面 传送门 思路 p到a 首先,本题中如果对于所有的$i$,连边$<i,p_i>$,那么可以得到一批环 那么这个题另外一点就是,可以变成连边$<i,p_{p_i}>$ 我们分多种情况来讨论 情况1:啥也没变 就是啥也没变 情况2:全都变了 这时考虑奇环和偶环 对于一个奇环,全部变了以后,它还是一个环,但是不是同构的 对于一个偶环,全换了以后,它会变成两个环,分别是全部奇数节点和全部偶数节点 情况3:变了一部分 此时容易发现,变出去的部分应该会这样: $<i,p_i>$…
题面 解析 这是个有趣的建图题啊. 首先我们可以发现,宽度严格递增是没什么用的. 因为实际上我们在旋转完以后, 矩形的顺序是可以随便排的. 因此只要保证宽度互不相同就行了. 然后,我们对长和宽离散化,对于每个值建一个点. 拿样例举个例子: 先把样例放出来: 3 5 16 10 5 5 10 然后建图(因为方便看所以没离散化): 接着,对于每个长,宽为\(a,b\)的矩形, 我们在\(a,b\)间连一条边. 那么图就成了这个亚子: 因为有两个矩形都是\((5,10)\),所以有两条边. 接着,我们…
每个点出度都为1,可以发现这张图其实是个环套树森林,树中儿子指向父亲,环上边同向. 首先自环肯定是没救的,先抬出去. 要使死亡人数最多的话,显然若一个点入度为0其不会死亡,而一个孤立的环至少会留下一个点.对于环套树,若某个点有子树,可以以瞄准它的点为起点,每个点都被在环上瞄准他的点所击中.这样就剩下了很多棵树,除叶子节点的点都会死亡. 死亡人数最少似乎同样可以贪心,虽然我没这么写.可以发现最后存活下来的人之间一定不存在瞄准关系,否则必有一个死亡.并且只要最后存活下来的人之间不存在瞄准关系(且不被…
对每行每列分别建一个点,问题转为选n+m条边,并给每条边选一个点覆盖,使每个点都被覆盖.也就是最小生成环套树森林. 用和Kruskal一样的方法,将边从小到大排序,若一条边被选入后连通块仍然是一个环套树(即边数不多于点数)则连上.证明大致同Kruskal. #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef long long ll; usin…