P8215-[THUPC2022 初赛]分组作业【网络流】

正题

题目链接:https://www.luogu.com.cn/problem/P8215


题目大意

2×n2\times n2×n个人,第2×i−12\times i-12×i1和第2×i2\times i2×i个人一组,然后每个人可以选择愿不愿意合作,愿意需要付出cic_ici代价,不愿意是did_idi代价,如果两个人都愿意,可以选择合作。如果一个人选择愿意另一个人不愿意,那么愿意的那个人会产生eie_iei的代价。

然后给出mmm对关系,然后题目描述开摆了
在这里插入图片描述
1≤n≤5000,0≤m≤10000,1≤ai,bi,ci,di,ei≤1091\leq n\leq 5000,0\leq m\leq 10000,1\leq a_i,b_i,c_i,d_i,e_i\leq 10^91n5000,0m10000,1ai,bi,ci,di,ei109


解题思路

首先考虑c,d,ec,d,ec,d,e的贡献,考虑用最小割。

首先c,dc,dc,d要选一个,所以它们肯定是串在一个点上的,所以S→i→TS\rightarrow i\rightarrow TSiTSSSiii的流量为ccciiiTTT的流量为ddd
然后eee的贡献就是一个选ccc一个选ddd时的贡献,所以我们可以让iii连向它的队友,流量为eee,如果iii选了ccc,它队友选了ddd,那么这条eee的边也要割。
然后因为还有一个选择是否合作,但是要求所有的都选择ccc的贡献,所以我们让新建一个点WWWS→WS\rightarrow WSW的一条边表示是否合作(如果连了就表示合作),然后WWW连向同一个队的两个点,

那么一个小组的图大概就长这样
在这里插入图片描述

然后考虑后面的贡献就很麻烦了
在这里插入图片描述
这一个我们可以直接让BBB所在组的WWW点连接AAA点就行了,如果AAA选了dddBBB的合作边没被割掉,那么刚好这条路就是通的,也需要被割掉。

至于
在这里插入图片描述
这个贡献,我们考虑反过来处理。
我们发现S→WiS\rightarrow W_iSWi这条边还没有权值,我们可以先默认如果AAA没有合作就会产生aia_iai的代价,然后如果BBB选择了不愿意,那么就会少产生aia_iai的贡献,我们让BBBddd值减去aia_iai
然后发现如果此时AAA没有合但是BBB不愿意也会少产生这个贡献,我们让WAW_AWA连向BBB费用为aia_iai,这样这种情况就不会少算了。
然后因为ddd可能减到负数,我们可以让所有的cccddd加上一个大整数,然后最后统一减去这部分贡献就好了。

这样就完美处理完了所有的条件


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const ll N=5100*6;
struct node{ll to,next,w;
}a[N<<4];
ll n,m,s,t,c[N],d[N],e[N],w[N];
ll tot=1,ls[N],dep[N],ans;
queue<ll> q;
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=0;return;
}
bool bfs(){while(!q.empty())q.pop();memset(dep,0,sizeof(dep));dep[s]=1;q.push(s);while(!q.empty()){ll x=q.front();q.pop();for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(!a[i].w||dep[y])continue;dep[y]=dep[x]+1;if(y==t)return 1;q.push(y);}}return 0;
}
ll dinic(ll x,ll flow){ll rest=0,k;if(x==t)return flow;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(!a[i].w||dep[y]!=dep[x]+1)continue;rest+=(k=dinic(y,min(flow-rest,a[i].w)));a[i].w-=k;a[i^1].w+=k;if(rest==flow)return flow;}if(!rest)dep[x]=0;return rest;
}
signed main()
{scanf("%lld%lld",&n,&m);s=3*n+1;t=s+1;for(ll i=1;i<=2*n;i++)scanf("%lld%lld%lld",&c[i],&d[i],&e[i]);for(ll i=1,x,y,a,b;i<=m;i++){scanf("%lld%lld%lld%lld",&x,&y,&a,&b);ll A=(x+1)/2,B=(y+1)/2;addl(2*n+B,x,b);w[A]+=a;d[y]-=a;addl(2*n+A,y,a);}for(ll i=1;i<=2*n;i++){addl(s,i,d[i]+1e14);addl(i,t,c[i]+1e14);ll p=(i&1)?(i+1):(i-1);addl(i,p,e[i]);}for(ll i=1;i<=n;i++){addl(s,2*n+i,w[i]);addl(2*n+i,2*i-1,1e18);addl(2*n+i,2*i,1e18);}while(bfs())ans+=dinic(s,1e18);printf("%lld\n",ans-200000000000000ll*n);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/317517.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET IdentityServer4实战-开篇介绍与规划

一.开篇寄语由于假期的无聊&#xff0c;我决定了一个非常有挑战性的活动&#xff0c;也就是在年假给大家带来一个基于OAuth 2.0的身份授权框架&#xff0c;它就是 IdentityServer4 &#xff0c;如果没有意外的话&#xff0c;一定可以顺利的写完的&#xff0c;如果两天写一篇的话…

CF1408G:Clusterization Counting(区间dp、克鲁斯卡尔重构树)

解析 很妙的一道题 看这两个南辕北辙的标签就知道这题不简单 看见dp思路还是得打开 一开始其实想到按边权排序了 但卡在了重构树上 遇到dp一定要敢想 勇于和图论等结合 考虑正解 按照边权升序排序 依次加边到图中 并查集维护连通性和集合内的边数 发现&#xff0c;一个联通块…

test5 3-20 2021省选模拟赛five

考试复盘 第一题&#xff1f;&#xff1f;是个什么互动哦&#xff0c;直接乱来的(&#xffe3;&#xffe3;)σ…(&#xff3f;&#xff3f;)ノ&#xff5c;壁 第二题是前几天考过的&#xff0c;所以知道是polyapolyapolya&#xff0c;但是式子推到最后的二项式定理没推对&am…

Cell Phone Network

Cell Phone Network 题意: 每个牧场的电塔可以覆盖与该牧场相邻的电塔&#xff0c;为了让所有牛都可以打电话&#xff0c;求建的电塔的最小数量 题解&#xff1a; 树的最小支配集 dp[x][0]&#xff1a;选点i&#xff0c;并且以点i为根的子树都被覆盖 dp[x][1]&#xff1a;不…

P8207-[THUPC2022 初赛]最小公倍树【Kruskal】

正题 题目链接:https://www.luogu.com.cn/problem/P8207 题目大意 有编号为[L,R][L,R][L,R]区间的点&#xff0c;连接两个点x,yx,yx,y边权的为LCM(x,y)LCM(x,y)LCM(x,y)&#xff0c;求这张图的最小生成树。 1≤L≤R≤106,R−L≤1051\leq L\leq R\leq 10^6,R-L\leq 10^51≤L≤…

微信小程序开发必看,《使用 .NET Core + DevOps 开发微信跨平台应用》,苏州.NET俱乐部课程分享...

【课程名称】《使用 .NET Core DevOps 开发微信跨平台应用》【老师介绍】苏震巍&#xff0c;苏州盛派网络CEO&#xff0c;微软最有价值专家&#xff08;MVP&#xff09;、微软 Ignite 技术大会讲师&#xff0c;Senparc.Weixin作者&#xff0c;《微信开发深度解析》等书作者。苏…

11.14 模拟:总结

update 等出分挂大分再回来打脸 一语成谶了属于是 给自己测了一下 《很棒》 真就挂了大分 实际得分&#xff1a; 00020 T1和T3都挂没了 qwq T1是因为两个背包的定义是不一样的&#xff01; 我应该做两个背包分别跑就好了 T3全部MLE… 我最后十分钟想贪一个T3的第五个点 然后…

P8208-[THUPC2022 初赛]骰子旅行【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P8208 题目大意 给出nnn个点若干条边的一张图中&#xff0c;一个人在111开始随机游走ttt步。 如果他到达一个点他曾经到达过的点&#xff0c;那么就会产生它上次在这个点走向的点的编号的贡献。 求期望贡献。 1≤n≤100,1≤…

Axial symmetry FZU - 2035

Axial symmetry FZU - 2035 题意&#xff1a; 给一个多边形&#xff0c;边平行于x轴或者y&#xff0c;问是否存在对称轴 题解&#xff1a; 将每个点的坐标&#xff0c;以及每个边的中点的坐标&#xff0c;按照顺时针顺序存入&#xff0c;多边形的对称轴一定穿过对应两个点&…

test 7 3-22 2021省选模拟赛seven

文章目录考试复盘人生赢家黑红兔考试复盘 T1T1T1 subtask1:n≤5subtask1:n\le 5subtask1:n≤5&#xff0c;暴搜点的颜色状态以及边的存在状态 对于一条连接相同颜色点的边&#xff0c;可要可不要&#xff0c;不会提供形态变化的贡献&#xff0c;2edge2^{edge}2edge dpdpdp&…

Shadow Properties之美(一)【Microsoft Entity Framework Core随笔】

最近在做公司的项目的时候&#xff0c;开始把部分程序迁移到EF Core&#xff0c;然后有了一些感触&#xff0c;趁着还没忘却&#xff0c;还是先记录下来。EF Core还在成长中&#xff0c;我写这个的时候&#xff0c;版本是2.2。如果对着已有的EF 5/6来说&#xff0c;还有很多功能…

CF1413C Perform Easily(two pointers)

解析 巧夺天工 可以说是把two pointers玩明白了 把所有的可能减出来的结果升序排列一下 然后一个选取区间合法当且仅当这个区间含有1-n所有数的至少一个可能的差 然后就可以two pointers了 #include<bits/stdc.h> const int N2e5100; const int mod1e97; #define ll lon…

CF1039E-Summer Oenothera Exhibition【LCT,根号分治】

正题 题目链接:https://www.luogu.com.cn/problem/CF1039E 题目大意 给出nnn个数的序列&#xff0c;mmm次询问至少将这个序列分成多少段才能满足每一段的和不超过w−qiw-q_iw−qi​。 1≤n,m≤105,1≤w,ai≤1091\leq n,m\leq 10^5,1\leq w,a_i\leq 10^91≤n,m≤105,1≤w,ai​…

E - Another Postman Problem FZU - 2038

E - Another Postman Problem FZU - 2038 题意&#xff1a; n个点通过n-1个边两两相连&#xff0c;每个边有权值&#xff0c;求对于每个点到其他点的距离和的总和 题解&#xff1a; 我们以下图中的1-2这条边为例子&#xff0c;1-2这条边一共计算了几次&#xff1f; 我们现在…

CF1034E Little C Loves 3 III(神仙构造+FWT_OR卷积)

title 题目 solution 先说很神仙的结论构造&#xff1a;对于aia_iai​&#xff0c;aivi∗4pop_count(i)a_iv_i*4^{pop\_count(i)}ai​vi​∗4pop_count(i)&#xff0c;bbb同理 ci∑j∣kiai∗bjc_i\sum_{j|ki}a_i*b_jci​∑j∣ki​ai​∗bj​&#xff0c;则ansi≡ci4pop_coun…

ASP.NET Core 3.0 项目开始“瘦身”

新的 ASP.NET Core 项目使用名为Microsoft.AspNetCore.App的综合包。该包也可以称为“ASP.NET Core 共享框架”&#xff0c;其背后的基本思想是&#xff0c;包括一个典型的应用程序所需要的所有东西。但是&#xff0c;如果看看该包的依赖项&#xff0c;对“需要”的定义看起来相…

CF1415D:XOR-gun(异或)

这就是CF 解析 这题真的是… …很妙 qwq 考虑到&#xff0c;如果相邻的连续三个二进制最高位相同&#xff0c;那么把后两个异或一下就可以打成目标 而如果不存在连续打三个二进制最高位相同的数&#xff0c;由于ai≤109a_i\leq10^9ai​≤109&#xff0c;所以n必然不超过60 前…

CF1369F-BareLee【博弈论,SG函数】

正题 题目链接:https://www.luogu.com.cn/problem/CF1369F 题目大意 TTT次游戏&#xff0c;每次给出一个sss和ttt&#xff0c;两个人轮流操作&#xff0c;可以让ss1ss1ss1或者ss2ss\times 2ss2&#xff0c;如果s>ts>ts>t的话那个人就输了。 每次输的人将作为下一次的…

D - Maximum Value Problem FZU - 2037

D - Maximum Value Problem FZU - 2037 题意&#xff1b; 这个序列[1&#xff0c;3&#xff0c;2&#xff0c;4]&#xff0c;maxx0.如果将maxx赋值为最大值需要3次&#xff0c;第一次为maxx1&#xff0c;第二次maxx3&#xff0c;第三次maxx4 给你一个n&#xff0c;求n全排列的…

一个.NET Core开发者的Linux入门学习笔记

用.NET Core开发也有一段时间了&#xff0c;但是由于工作原因一直都是在Windows系统上进行的开发&#xff0c;一直想学习Linux然后把.NET Core开发的程序跑在Linux上&#xff0c;然后把心得体会记录一下发布再博客园&#xff0c;奈何拖延症泛滥&#xff0c;所以只写过一篇《Cen…