标题被网络流虐菜了
前言
被云落骂了,为了证明我现在有多菜,他让我做了这道题
正文
要求构造一个
在此基础上要求字典序最小。两个矩阵比较字典序时先比较第一行,第一行相等再比较第二行……
不考虑字典序的构造
行列拆开,把源点连向行,容量为
加上字典序,越先取 0 越好
那么如果一个数能取 0 ,就尽量取 0
我们又知道了在上面的算法中在增广路上的点可以填 1
那么填 0 的情况除了不在增广路上,就是在增广路上但不要这个点还有其他增广路
int check(int x,int y){
dinic();
if(!r1[x]||!c1[y-n])return 1;//0的数量
r1[x]--,c1[y-n]--;
if(e[a[x][y]].w){
e[a[x][y]].w=0;
e[a[x][y]^1].w=0;
return 0;
}else{
e[a[x][y]].w=0;
e[a[x][y]^1].w=0;
e[a[s][x]].w++;
e[a[s][x]^1].w--;
e[a[y][t]].w++;
e[a[y][t]^1].w--;
if(dinic()==1)return 0;
r1[x]++,c1[y-n]++;
e[a[y][t]].w--;
e[a[y][t]^1].w++;
e[a[s][x]].w--;
e[a[s][x]^1].w++;
return 1;
}
}
2.对任意两个连通的节点
由这条,我们可以给每个点加一个势能(可以看看第一篇题解的图)
设
n-2 个方程,1,n 随便附个势能
如果我们把所有点高度都按照一定比例缩放,这两个限制仍然是成立的。
我们找到能缩放的最大比例,然后进行缩放,就得到了最大流(即和汇点相连的边的流量之和)和每条边的流量。
对于每一天向后一天连边
对于每一种志愿者选择,
从超级源向第一天连边
从最后一天+1向超级汇连边
这个就是
你需要先保证最大流,然后再看费用
后记
不嘻嘻
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】