传送门

网络流好题。


这道题可以动态建图。

不难想到把每个球iii都拆点成i1i_1i1​和i2i_2i2​,每次连边(s,i1),(i2,t)(s,i_1),(i_2,t)(s,i1​),(i2​,t),如果(u,v)(u,v)(u,v)可以匹配的话就连边(u1,v2)(u_1,v_2)(u1​,v2​),然后用最大流检验,如果能流动说明不用加柱子,否则需要新加一个柱子。

题目还要求输出方案。

那么我们在dfsdfsdfs的时候更新后继就可以了。

代码:

#include<bits/stdc++.h>
#define N 50005
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
struct edge{int v,c,next;};
int n,ans,tot,bg[60],nxt[N];
bool vis[N];
struct Dinic{
	int first[N],cur[N],cnt,d[N],s,t;
	edge e[N<<1];
	inline void init(){s=0,t=N-1,memset(first,-1,sizeof(first)),cnt=-1;}
	inline void addedge(int u,int v,int c){e[++cnt].v=v,e[cnt].c=c,e[cnt].next=first[u],first[u]=cnt;}
	inline void add(int u,int v,int c){addedge(u,v,c),addedge(v,u,0);}
	inline bool bfs(){
		queue<int>q;
		memset(d,-1,sizeof(d)),d[s]=0,q.push(s);
		while(!q.empty()){
			int x=q.front();
			q.pop();
			for(int i=first[x];~i;i=e[i].next){
				int v=e[i].v;
				if(~d[v]||!e[i].c)continue;
				d[v]=d[x]+1,q.push(v);
			}
		}
		return ~d[t];
	}
	inline int dfs(int p,int f){
		if(p==t)return f;
		int flow=f;
		for(int&i=cur[p];~i;i=e[i].next){
			int v=e[i].v;
			if(!flow)break;
			if(e[i].c&&d[v]==d[p]+1){
				int tmp=dfs(v,min(flow,e[i].c));
				if(v!=t)nxt[p>>1]=v>>1;
				if(!tmp)d[v]=-1;
				e[i].c-=tmp,e[i^1].c+=tmp,flow-=tmp;
			}
		}
		return f-flow;
	}
	inline int solve(){
		int ret=0;
		while(bfs())memcpy(cur,first,sizeof(first)),ret+=dfs(s,0x3f3f3f3f);
		return ret;
	}
}dinic;
int main(){
	n=read(),ans=0,tot=0,dinic.init();
	while(tot<=n){
		++ans,dinic.add(dinic.s,ans*2,1),dinic.add(ans*2+1,dinic.t,1);
		for(int i=sqrt(ans)+1;i*i<ans*2;++i)dinic.add((i*i-ans)*2,ans*2+1,1);
		if(!dinic.solve())bg[++tot]=ans;
	}
	--ans,printf("%d\n",ans);
	for(int i=1;i<=n;++i){
		if(vis[bg[i]])continue;
		int pos=bg[i];
		vis[pos]=1;
		while(pos)printf("%d ",pos),pos=nxt[pos],vis[pos]=1;
		puts("");
	}
	return 0;
}

2018.10.14 loj#6003. 「网络流 24 题」魔术球(最大流)的更多相关文章

  1. 2018.10.14 loj#6012. 「网络流 24 题」分配问题(费用流)

    传送门 费用流水题. 依然是照着题意模拟建边就行了. 为了练板子又重新写了一遍费用流. 代码: #include<bits/stdc++.h> #define N 305 #define ...

  2. 2018.10.14 loj#6011. 「网络流 24 题」运输问题(费用流)

    传送门 费用流入门题. 直接按照题意模拟. 把货物的数量当做容量建边. 然后跑一次最小费用流和最大费用流就行了. 代码: #include<bits/stdc++.h> #define N ...

  3. [loj #6003]「网络流 24 题」魔术球 二分图最小路径覆盖,网络流

    #6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...

  4. 【刷题】LOJ 6003 「网络流 24 题」魔术球

    题目描述 假设有 \(n\) 根柱子,现要按下述规则在这 \(n\) 根柱子中依次放入编号为 \(1, 2, 3, 4, \cdots\) 的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任 ...

  5. LibreOJ 6003. 「网络流 24 题」魔术球 贪心或者最小路径覆盖

    6003. 「网络流 24 题」魔术球 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 ...

  6. Libre 6003 「网络流 24 题」魔术球 (网络流,最大流)

    Libre 6003 「网络流 24 题」魔术球 (网络流,最大流) Description 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为 1,2,3,4......的球. (1)每次只 ...

  7. 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)

    传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...

  8. 2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)

    传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. ...

  9. LOJ6003 - 「网络流 24 题」魔术球

    原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...

随机推荐

  1. autolayout不work

    对于代码创建的UIView,将下面的选项关掉 [label3 setTranslatesAutoresizingMaskIntoConstraints:NO];

  2. python os.mkdir与 os.makedirs

    1.mkdir( path [,mode] )      作用:创建一个目录,可以是相对或者绝对路径,mode的默认模式是0777.      如果目录有多级,则创建最后一级.如果最后一级目录的上级目 ...

  3. ubuntu禁用super(win)键

    ubuntu在切换输入法使用super + space的时候经常会在按下super的时候弹出luncher,影响操作,解决方法为禁用super启动luncher. 1.安装compizconfig-s ...

  4. flask_sqlalchemy

    简介: flask_sqlalchemy 是 Flask Web 框架的一个扩展. 使 Web 服务器以 (ORM: Object Relational Mapping) 对象关系映射的方式与数据库交 ...

  5. 英语广播原声听力100篇MP3及听力原文

    =============7.6================ Passage 031- 人工智能对人类的利与弊From a personal assistant, to doing searche ...

  6. keras、 tensor flow 教程

    [keras]http://keras-cn.readthedocs.io/en/latest/getting_started/concepts/,[tensorflow] http://blog.c ...

  7. 在命令提示符下启动并使用JVM时,简单设置堆

    公司电脑内存太小了,只有8G:或者说JVM默认启动占用内存太大了,同时启动多个服务内存就炸了. 比如: java -Xmx128m -Xms64m -Xmn32m -Xss16m -jar eurek ...

  8. php ip2long 负数问题

    官方网站: Note: 因为PHP的 integer 类型是有符号,并且有许多的IP地址讲导致在32位系统的情况下为负数, 你需要使用 "%u" 进行转换通过 sprintf()  ...

  9. eclipse zg项目学习

    一.基本知识 1.新增测试系统: xx/jsp:用于摆放jsp xx/src:放置java source 2.在项目上,右键,New-Folder,新建xx文件夹. 同样的方法,在xx文件夹上,右键N ...

  10. SpringMVC中ApplicationContext中的配置文件的问题(No bean named 'sessionFactory' is defined 已解决)

    在一个SpringMVC项目中, 连着两天不管怎么搞都是一直在报错, 报的最多的就是一个 Servlet.service() for servlet [springDispatcherServlet] ...