首页 > 其他分享 >F. Madoka and The First Session

F. Madoka and The First Session

时间:2023-05-11 18:47:25浏览次数:49  
标签:Madoka return int tot dep Session ans now First

F. Madoka and The First Session

/*
首先是对权值进行处理,把每次操作都看成一个减去2就可以了
这样就只需要对大家都减去一个1,最后如果有奇数或者大于0,那就一定不可以

然后就是见图,对边进行建图,代表这条边只能跑一次
对si=1的直接建立边就可以了
si=0的需要建立中转点,因为要限制流量

最后输出,反过来看边这么选择的点就可以了  
*/ 
#include <bits/stdc++.h>
using namespace std;
const int N=2e4+10,M=1e5+5;
const int inf=1e9;

int h[N],ne[M],e[M],w[M],tot=1;
void add(int a,int b,int c) {
	e[++tot]=b; w[tot]=c; ne[tot]=h[a]; h[a]=tot;
	e[++tot]=a; w[tot]=0; ne[tot]=h[b]; h[b]=tot;
} 

int n,m,S=N-2,T=N-1;
int dep[N],cur[N];

bool bfs() {
	memset(dep,0,sizeof(dep));
	memcpy(cur,h,sizeof(h));
//	cout<<cur[S]<<endl;
	queue<int>q;
	q.push(S);dep[S]=1;
	while(!q.empty()) {
		int now=q.front();q.pop();
		for(int i=h[now];i;i=ne[i]) {
			int to=e[i];
			if(dep[to]==0&&w[i]>0)
				dep[to]=dep[now]+1,q.push(to);
		}
	}
	return dep[T];
}

int dfs(int now,int sum) {
	if(now==T)return sum;
	int ans=0;
//	cout<<cur[now]<<endl;
//	cout<<h[now]<<endl;
	for(int i=cur[now];i&&sum;i=ne[i]) {
		cur[now]=i;
		int to=e[i];
//		cout<<to<<endl;
		if(dep[to]==dep[now]+1&&w[i]>0) {
			int k=dfs(to,min(w[i],sum));
			if(k==0)dep[to]=-1;
			ans+=k,sum-=k;
			w[i]-=k,w[i^1]+=k;
		}
	}
	return ans;
}

int dinic() {
	int ans=0;
	while(bfs())ans+=dfs(S,inf);
	return ans;
}

int s[N],a[N];
int p[N][2];

void solve() {
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>s[i];
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++) {
		cin>>p[i][0]>>p[i][1];
		a[p[i][0]]--,a[p[i][1]]--;
	}
	for(int i=1;i<=n;i++)
		if(s[i]&&(a[i]%2||a[i]>0)) {
			cout<<"NO\n";
			return ;
		}
	for(int i=1;i<=m;i++) {
		add(S,i,1);
		add(i,p[i][0]+m,1);
		add(i,p[i][1]+m,1);
	}
	int sum=0,tmp=N-3;
	for(int i=1;i<=n;i++) {
		if(s[i]) {
			add(m+i,T,-a[i]/2);
			sum-=a[i]/2;
		}
		else add(m+i,tmp,inf);
	}
	add(tmp,T,m-sum);
	int ans=dinic();
	//不能满足流量,或者是需求过大 
	if(ans!=m||sum>m)cout<<"NO\n";
	else {
		cout<<"YES\n";
		for(int now=m+1;now<=n+m;now++) {
			for(int i=h[now];i;i=ne[i]) {
				int to=e[i];
				if(to<=m&&w[i]) {
					if(p[to][0]!=now-m)swap(p[to][0],p[to][1]);
				}
			}
		}	
		for(int i=1;i<=m;i++)cout<<p[i][0]<<' '<<p[i][1]<<'\n';
	}
}

signed main() {
	solve();
	return 0;
}

标签:Madoka,return,int,tot,dep,Session,ans,now,First
From: https://www.cnblogs.com/basicecho/p/17391908.html

相关文章

  • cookie session token 发展史(便于理解jwt)
    目录一、cookiesessiontoken发展史(彻底理解cookie,session,token,便于理解jwt)1、Cookie,Session,Token发展史2、Cookie,Session解释2.1Cookie2.2Session2.3cookie和session的区别3、Token介绍3.1传统方式——基于服务器的验证3.2基于服务器验证方式的问题3.2.1Seesions3.2.2......
  • AWS 中的另外一种远程工具 AWS Session Manager
    >作者:[SRE运维博客](https://www.cnsre.cn/)>博客地址:[https://www.cnsre.cn/](https://www.cnsre.cn/)>文章地址:[https://www.cnsre.cn/posts/230129126154/](https://www.cnsre.cn/posts/230129126154/)>相关话题:[https://www.cnsre.cn/tags/aws/](https://www.cnsre.......
  • Pytest - xdist 保证多进程共享 session 级别fixture
    背景:搜索自动化不同的测试文件件需要使用相同的变量解决:importloggingfromtoolsimportset_loggingimportpytestimporttimefromfilelockimportFileLockimportjsonimportosset_logging.set_test_log()@pytest.fixture(scope="session")defget_batch_i......
  • SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows
    [root@storage1~]#mount/dev/sdj3/mnt/data-dir/ntfs_mst_post_read_fixup_warn:magic:0xffffffffsize:1024usa_ofs:65535usa_count:65535:InvalidargumentRecord16hasnoFILEmagic(0xffffffff)CorruptattributelistentryinMFTrecord0Failedto......
  • Failed to open connection to "session" message bus: Using X11 for dbus-daemon au
    Failedtoopenconnectionto"session"messagebus:UsingX11fordbus-daemonautolaunchwasdisabledatcompiletime,setyourDBUS_SESSION_BUS_ADDRESSinstead4Failedtoopenconnectionto"session"messagebus:UsingX11fordbus-da......
  • Python_16 session、cookie 鉴权
    一、查缺补漏1.pprint https://www.cnblogs.com/yjybupt/p/10669988.html https://www.cnblogs.com/wongbingming/p/12854618.html 2.鉴权: http://testingpai.com/article/1621929988356 3.importjson json.du......
  • Django高级之-cookie与session
    目录1背景信息cookie的介绍cookie的由来什么是cookiecookie的原理Cookie规范Cookie的覆盖在浏览器中查看cookiesession的介绍session的由来什么是sessiontoken的介绍token的由来什么是token?Django操作cookie设置cookie获取cookie删除CookieCookie版登录校验案例Django操作Session......
  • 解决antd form表单校验错误时,设置scrollToFirstError 不能滚动到第一个校验错误位置
    使用antdform表单自带属性scrollToFirstError校验不通过时自动滚动到第一个校验错误位置,但是经常没有效果,手动添加一个滚动方法来处理//表单滚动到第一个报错处(antd)exportconstscrollToFirstError=()=>{document.querySelector('.ant-form-item-has-error')?.scro......
  • MyBatis-Plus和PageHelper冲突导致Factory method sqlSessionFactory threw exception
    springboot开始引入了mybaits-plus。后来想引入pagehelper进行分页,引入之后报错ErrorstartingApplicationContext.Todisplaytheconditionsreportre-runyourapplicationwith'debug'enabled.13:48:24.428ERRORo.s.boot.SpringApplication[845]-Applicationrun......
  • Django操作session和中间件以及csrf跨站服务
    Django操作session#cookie保存在浏览器,数据不安全session可以将用户信息保存在服务端,基于cookie工作的1.用户信息认证2.生成随机字符串3.随机字符串和用户信息绑定一起,保存,默认在mysql4.把随机字符串返回到浏览器,将其保存,再次访问直接带其一起传输至服务端,服务端用其进......