luoguP2711 小行星】的更多相关文章

题目描述 星云中有n颗行星,每颗行星的位置是(x,y,z).每次可以消除一个面(即x,y或z坐标相等)的行星,但是由于时间有限,求消除这些行星的最少次数. 输入输出格式 输入格式: 第1行为小行星个数n,第2行至第n+1行为xi, yi, zi,描述第i个小行星所在的位置. 输出格式: 共1行,为消除所有行星的最少次数. 输入输出样例 输入样例#1: 3 1 2 3 2 3 1 1 3 2 输出样例#1: 2 说明 1≤n≤50000 1≤x,y,z≤500 建立最小割模型,y拆成两个,一个连x…
B - 邱老师降临小行星 Time Limit: 10000/5000MS (Java/Others)     Memory Limit: 65536/65535KB (Java/Others) Submit Status 人赢邱老师和任何男生比,都是不虚的.有一天,邱老师带妹子(们)来到了一个N行M列平面的小行星.对于每一个着陆地点,邱老师总喜欢带着妹子这样走:假设着陆地点为(r0, c0),那么他们下一步只能选择相邻格点,向四周走,即(r0–1, c0), (r0 + 1, c0), (r0…
[Luogu2711]小行星(网络流,最大流) 题面 题目描述 星云中有n颗行星,每颗行星的位置是(x,y,z).每次可以消除一个面(即x,y或z坐标相等)的行星,但是由于时间有限,求消除这些行星的最少次数. 输入输出格式 输入格式: 第1行为小行星个数n,第2行至第n+1行为xi, yi, zi,描述第i个小行星所在的位置. 输出格式: 共1行,为消除所有行星的最少次数. 输入输出样例 输入样例#1: 3 1 2 3 2 3 1 1 3 2 输出样例#1: 2 说明 1≤n≤50000 1≤x…
链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1741 思路 消除所有的小行星 每个点(x,y)只有选择x或者y才能被覆盖 二分图最小点覆盖=最大流 首先,最小顶点覆盖一定>=最大匹配,因为假设最大匹配为n,那么我们就得到了n条互不相邻的边,光覆盖这些边就要用到n个点.剩下的点就不用去管他,要不然m就!=最大匹配 不明白就去这里 左边横边,右边竖边 然后开心的跑最大流就可以 代码 #include <iostream> #incl…
邱老师降临小行星 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Description 人赢邱老师和任何男生比,都是不虚的.有一天,邱老师带妹子(们)来到了一个N行M列平面的小行星.对于每一个着陆地点,邱老师总喜欢带着妹子这样走:假设着陆地点为(r0, c0),那么他们下一步只能选择相邻格点,向四周走,即(r0–1, c0), (r0 + 1, c0), (r0, c…
题目大意:有$n$颗行星,每颗行星的位置是$(x,y,z)$.每次可以消除一个面(即$x,y$或$z$坐标相等)的行星,求消除这些行星的最少次数. 题解:最小割,对于每一颗小行星,从 x 面的出点向 y 面的入点连一条容量为 inf 的边(仅为保证点之间的连通性),从 y 面的出点向 z 面的入点连容量为 inf 的边.再从超级源向每个 x 面的入点连容量为 inf 的边, 从每个 z 面的出点向超级汇连容量为 inf 的边.可以简化为从超级源 S 向每个 x 连一条权值为 1 的边.从 z 面…
题目背景 pid=3437 题目描述 星云中有n颗行星,每颗行星的位置是(x,y,z).每次可以消除一个面(即x,y或z坐标相等)的行星,但是由于时间有限,求消除这些行星的最少次数. 输入输出格式 输入格式: 第1行为小行星个数n,第2行至第n+1行为xi, yi, zi,描述第i个小行星所在的位置. 输出格式: 共1行,为消除所有行星的最少次数. 输入输出样例 输入样例#1: 3 1 2 3 2 3 1 1 3 2 输出样例#1: 2 说明 1≤n≤50000 1≤x,y,z≤500 思路:…
题目 P2711 小行星 解析 这道题挺巧妙的,乍一看是空间上的,无从下手,稍微转换一下就可以了. 看到题目,求消除这些行星的最少次数,就是求最小割,也就是求最大流,考虑怎样建图. 考虑当我们消去一个面上的所有点时,我们消去这个面后,这个面就不会再被消了,也就是只能被消一次,比如我们消去与\(\texttt{x=1}\)垂直的面上的点后,与\(\texttt{x=1}\)垂直的这个面就不会被再消一次,\(\texttt{y,z}\)同理. 但在这个面上的某些点(\(\texttt{x}\)相同,…
2018-08-07 11:12:01 问题描述: 问题求解: 使用一个链表模拟栈,最后的状态一定是左侧全部是负值,表示的是向左飞行,右侧的全部是正值,表示的是向右飞行. 遍历整个数组,对于每个读到的数字,如果是正值则直接加入链表中,如果是负值,则需要判断链表中末尾的数字如果也是负值,则表示目前链表中全部向左飞行,则加入,如果说此时链表中最后的数字为正值,则表示会相撞,需要进行比较判断. 这个题目的解法也给出了如果将Colleaction转化为int[],可以使用colleaction.stre…
二分图最大点覆盖模型,因为对于一个点(x,y)显然只要选x或者y就好了,于是连边,跑最大匹配=最大点覆盖(不会证) #include<iostream> #include<cstdio> using namespace std; const int N=10005,inf=1e9; int n,m,h[N],cnt,con,lk[N],v[N],ti; struct qwe { int ne,to; }e[100005]; int read() { int r=0,f=1; cha…