首页 > 其他分享 >07.07 网络流

07.07 网络流

时间:2024-07-17 10:07:15浏览次数:9  
标签:int scanf 餐巾 ++ 网络 07.07 link deg

P4249

双倍经验 CF1264E,后续把三元组全部看成无序。

一个三元环与三个点有关,如果转而统计不合法的三元组,一定恰存在一个 \(u\) 使得 \(u \to v\) 以及 \(u \to w\) 的边都存在。因此若 \(u\) 的出边条数为 \(deg_u\),其对答案的贡献为 \(deg_u(deg_u-1)/2\)。

当度数增加 \(1\) 时,对答案贡献 \(deg_u-1\)。因此对于 \(u\) 向汇点连边权为 \(deg_u-1 \sim n-2\) 的边,相当于差分建图。

一条未出现的边相当于给 \(u\) 或 \(v\) 的度数增加一。

因此 \(u\) 对汇点连 \(n-1-deg_u\) 条费用为 \(deg_u-1 \sum n-2\),流量为 \(1\) 的边,对于每条未出现的边,新建 \(x\),\(u \to x,u \to y\) 流量为 \(1\),费用为 \(0\),源点到 \(x\) 流量为 \(1\),费用为 \(0\)。

算是很巧妙的拆贡献,无论是把贡献放到 \(u\) 还是差分建图。

int main() {
  int n; scanf("%d", &n);
  std::vector<std::vector<int>> a(n, std::vector<int>(n, 2));
  std::vector<int> deg(n);
  int s = n, t = n + 2, ans = 0;
  MF S(n + 3 + n * n, s, t);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++)
      scanf("%d", &a[i][j]), deg[i] += (a[i][j] == 1);
    a[i][i] = 0, ans += deg[i] * (deg[i] - 1) / 2;
    for (int j = deg[i]; j < n; j++) 
      S.link(i, t, 1, j);
  }
  int cnt = n + 2;
  std::vector<std::vector<int>> id(n, std::vector<int>(n, -1));
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) if (a[i][j] == 2) {
      S.link(s, id[i][j] = ++cnt, 1, 0);
      S.link(id[i][j], i, 1, 0);
      S.link(id[i][j], j, 1, 0);
    }
  }
  ans += S.mcmf().second;
  printf("%d\n", n * (n - 1) * (n - 2) / 6 - ans);
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++) if (id[i][j] != -1) {
      int x = S.e[id[i][j]][1].v, y = i + j - x;
      if (!S.e[id[i][j]][1].w)
        a[x][y] = 1, a[y][x] = 0;
      else
        a[y][x] = 1, a[x][y] = 0;
    }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++)
      printf("%d ", a[i][j]);
    printf("\n");
  }
}

P4174

双倍经验 CF1082G。

考虑在一张二分图上跑最小割。最小割模型形如:左边和右边中至少一边产生贡献。

考虑在左边放代价,右边放贡献。则若贡献被选中,则所有代价都不必付出;若所有代价都付出,则贡献可以不被选中。取反,让右边被割表示无贡献,不割表示有贡献,则若有贡献,则所有代价都必须被付出(右边没有被割断);若无贡献,则左边随意。

显然这道题可以这样做。

每个物体只有两种状态,要么选,要么不选;

给定所有物体被选择的状态,则问题能够得到唯一的答案。

https://www.luogu.com.cn/article/0dbgzys2

感性理解,如果某个组在代价处就已经割断了,通过最小割,我们增加了代价,但保住了收益,如果割掉收益,说明这个组的收益不优,宁愿不要它,于是抵消了收益,但没有代价。

https://www.luogu.com.cn/article/5utmf46o

int main() {
  int n, m; scanf("%d %d", &n, &m);
  std::vector<int> a(n);
  int s = n + m, t = n + m + 1;
  MF S(n + m + 2, s, t);
  LL ans = 0;
  for (int i = 0, x; i < n; i++) {
    scanf("%d", &x);
    S.link(s, i, x);
  }
  for (int i = n, u, v, w; i < n+m; i++) {
    scanf("%d %d %d", &u, &v, &w), --u, --v, ans += w;
    S.link(i, t, w), S.link(u, i, inf), S.link(v, i, inf);
  }
  printf("%lld\n", ans - S.mf());
}

P1251

费用流,大小为 \(1\) 的流代表一张餐巾。

买餐巾:\(s \to i\) 连大小正无穷,单位费用为 \(p\) 的边。

新餐巾和旧餐巾不能混用,于是拆点,把旧餐巾和新餐巾拆成两个点。

一天用过的餐巾会变旧,因此拆成早晚的点。

旧餐巾可以沿用,因此晚上的旧餐巾连第二天晚上的旧餐巾。

早上多余的新餐巾事实上不优,因为每天购买餐巾的钱一样。所以可以看成早上只有新餐巾,晚上只有旧餐巾。因此每天晚上向 \(x\) 天后早上连边,容量无限,表示去洗。

每天需要有 \(r_i\) 张餐巾,因此每天早上向汇点连容量为 \(r_i\) 的边。同时,每天会产生 \(r_i\) 张旧餐巾,因此每天从源点连 \(r_i\) 的边到晚上。

拆早晚的想法非常厉害,尤其是把旧餐巾看作产生的一种东西,分开看新餐巾被送往汇点、旧餐巾从源点产生。

int main() {
  int n; scanf("%d", &n);
  std::vector<int> r(n);
  for (int &x : r) scanf("%d", &x);
  int p, m1, f1, m2, f2;
  scanf("%d %d %d %d %d", &p, &m1, &f1, &m2, &f2);
  int s = 2 * n, t = s + 1;
  MCMF S(2 * n + 2, s, t);
  for (int i = 0; i < n; i++) {
    int x = 2 * i, y = x + 1;
    S.link(s, y, r[i], 0), S.link(x, t, r[i], 0);
    S.link(s, x, inf, p);
    if (i + m1 < n) {
      S.link(y, 2 * (i + m1), inf, f1);
    }
    if (i + m2 < n) {
      S.link(y, 2 * (i + m2), inf, f2);
    }
    if (i + 1 < n)
      S.link(y, y + 2, inf, 0);
  }
  printf("%lld\n", S.mcmf().second);
}

标签:int,scanf,餐巾,++,网络,07.07,link,deg
From: https://www.cnblogs.com/purplevine/p/18306732

相关文章

  • 十五、【机器学习】【监督学习】- 神经网络回归
    系列文章目录第一章【机器学习】初识机器学习第二章【机器学习】【监督学习】-逻辑回归算法(LogisticRegression)第三章【机器学习】【监督学习】-支持向量机(SVM)第四章【机器学习】【监督学习】-K-近邻算法(K-NN)第五章【机器学习】【监督学习】-决策树(Dec......
  • PCDN技术如何应对网络延迟问题?
    PCDN技术通过以下几种方式应对网络延迟问题:去中心化分发:与传统的CDN不同,PCDN利用用户的闲置带宽和存储资源来共享和传递内容。这意味着内容不再仅仅依赖于中心化的服务器进行分发,而是可以通过多个用户设备同时进行分发。这种去中心化的分发方式有效分散了网络流量,降低了服......
  • 网络层
                                          ......
  • 虚拟机网络配置最佳实践
    一、虚拟网卡配置1.1设置虚拟网卡点击VMwareNetworkAdapterVMnet8设置虚拟网卡注意要点:1.设置静态IP,地址为:192.168.2.1002.设置子网掩码(默认):255.255.255.03.设置默认网关:192.168.2.1(重要!!!这里要跟下面虚拟机网络设置中的NAT设置中的网关IP一致)2.3DHCP设置......
  • 2021 ICPC 网络赛 第二场 L Euler Function(势能线段树,欧拉函数,状态压缩)
    2021ICPC网络赛第二场LEulerFunction题意给定序列,定义两个操作\(l,r,x\)对区间\([l,r]\)的数乘\(x\)\(l,r\)求\(\sum\phi{a}_{i}\)思路注意欧拉函数的性质,若\(i\bmodp=0\),\(\phi(i*p)=p*\phi(i)\),否则\(\phi(i*p)=(p-1)*\phi(i)\)因为\(x,w\)的......
  • P27-P47构建神经网络进化智能体-构建用于训练强化学习之鞥提的随机环境-构建基于价值
    文章目录构建神经网络进化智能体前期准备实现步骤工作原理参考资料第二章基于价值、策略和行动者-评论家的深度强化学习算法实现技术要求构建用于训练强化学习智能体的随机环境前期准备实现步骤工作原理构建基于价值的强化学习智能体算法前期准备实现步骤工作原理......
  • 服务器上数据定时同步到网络磁盘
    背景:由于权限问题无法将网络磁盘直接挂载到HPC上,但是可以挂载到本地,解决思路是通过rsyncd进行同步,每次同步的时候都将网络磁盘挂载到本地。我想把服务器上/home/s222552331/LUTO2_XH/Custom_runs/下的文件同步到网络磁盘的z/LUF-Modelling/LUTO2_XH/LUTO2/output一、Window本地操......
  • 中国算力网络市场发展分析
    &nbsp;中国算力网络市场发展现状(2024)数据中心,作为集中部署计算机系统、通信和存储等设备的基础设施,有两种主要形式。仅提供场地和机柜的数据中心,通常被称为DC(DataCenter)。而那些同时提供带宽服务的数据中心,则被定义为IDC(互联网数据中心InternetDataCenter)。算力,即计算能......
  • 本地和网络yum源的配置,以及自建yum仓库
    本地和网络yum源的配置rpm-ivhxxx手动添加依赖,yum不执行安装,自动处理依赖管理yum优点rpm安装(下载软件,单独安装,需要解决依赖关系)源码安装configuremakemakeinstallyum基于rpm,相当于rpm升级版,自动解决依赖关系1.使用光盘作为yum源仓库1)在vmware中装载centos7光盘......
  • 存储系列DAS,SAN,NAS常见网络架构
    随着主机、磁盘、网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要。因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里我们分析一下当前主流的存储架构。一、DASDirectAttachedStorage,直接连......