本质上就是找环,建二分图跑费用流就可以了。。。

#include <iostream>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <climits>
#include <cstdlib>
#include <cmath>
#include <time.h>
#define maxn 205
#define maxm 500005
#define eps 1e-12
#define mod 998244353
#define INF 0x3f3f3f3f
#define PI (acos(-1.0))
#define lowbit(x) (x&(-x))
#define mp make_pair
//#define ls o<<1
//#define rs o<<1 | 1
//#define lson o<<1, L, mid
//#define rson o<<1 | 1, mid+1, R
//#pragma comment(linker, "/STACK:102400000,102400000")
#define pii pair<int, int>
typedef long long LL;
typedef unsigned long long ULL;
//typedef int LL;
using namespace std;
LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;}
LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;}
// headstruct Edge
{int v, c, w, next;Edge(int v = 0, int c = 0, int w = 0, int next = 0) : v(v), c(c), w(w), next(next) {}
}E[maxm];queue<int> q;
int H[maxn], cntE;
int vis[maxn];
int cap[maxn];
int dis[maxn];
int cur[maxn];
int n, m, flow, cost, s, t, T;void addedges(int u, int v, int c, int w)
{E[cntE] = Edge(v, c, w, H[u]);H[u] = cntE++;E[cntE] = Edge(u, 0, -w, H[v]);H[v] = cntE++;
}bool spfa()
{memset(dis, INF, sizeof dis);cur[s] = -1;vis[s] = ++T;dis[s] = 0;cap[s] = INF;q.push(s);while(!q.empty()) {int u = q.front();q.pop();vis[u] = T - 1;for(int e = H[u]; ~e; e = E[e].next) {int v = E[e].v, c = E[e].c, w = E[e].w;if(c && dis[u] + w < dis[v]) {dis[v] = dis[u] + w;cap[v] = min(cap[u], c);cur[v] = e;if(vis[v] != T) {vis[v] = T;q.push(v);}}}}if(dis[t] == INF) return false;flow += cap[t];cost += cap[t] * dis[t];for(int e = cur[t]; ~e; e = cur[E[e ^ 1].v]) {E[e].c -= cap[t];E[e ^ 1].c += cap[t];}return true;}int mcmf()
{flow = cost = 0;while(spfa());return cost;
}void init()
{cntE = T = 0;memset(H, -1, sizeof H);memset(vis, 0, sizeof vis);
}void work(int _)
{init();scanf("%d", &n);int w;s = 0, t = 2 * n + 1;for(int i = 1; i < n; i++)for(int j = i+1; j <= n; j++) {scanf("%d", &w);addedges(i, j+n, 1, w);addedges(j, i+n, 1, w);}for(int i = 1; i <= n; i++) addedges(s, i, 1, 0);for(int i = 1; i <= n; i++) addedges(i+n, t, 1, 0);printf("Case %d: %d\n", _, mcmf());
}int main()
{int _;scanf("%d", &_);for(int i = 1; i <= _; i++) work(i);return 0;
}

【网络流】 csu 1623 Inspectors相关推荐

  1. 【CSUOJ 1623】Inspectors

    对每一个点进行拆点,并且每个入点和出点的容量设为1,因为每个点的出度与入度都为1且不存在自己连自己的边,故最后得到的图都为环.跑最小费用流就好了e 代码如下: #include<cstdio&g ...

  2. 网络流24题(1) P2756 飞行员配对方案问题

    题目链接 题意:求一个最大的二分匹配,网络流最大流,自己造一个源点一个汇点,源点0到1~m流为1,m+1~n到汇点n+1流为1,然后就是题目给出的也是流为1,图就是这样的,套dinic一个板子,但是题 ...

  3. 【网络流24题】最小路径覆盖问题

    [题目]1738: 最小路径覆盖问题 [题解]网络流 关于输出路径,因为即使有反向弧经过左侧点也一定会改变左侧点的去向,若没连向右侧就会被更新到0,所以不用在意. mark记录有入度的右侧点,然后从没 ...

  4. 网络流—Edmonds-Karp 最短增广路算法(最大流)

    网络流----Edmonds-Karp 最短增广路算法 ■求最大流的过程,就是不断找到一条源到汇的路径,然后构建残余网络,再在残余网络上寻找新的路径,使总流量增加,然后形成新的残余网络,再寻找新路径- ...

  5. [BZOJ2502]清理雪道 有上下界网络流(最小流)

    2502: 清理雪道 Time Limit: 10 Sec  Memory Limit: 128 MB Description 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有 ...

  6. poj1273(最大网络流问题模版)

    网络流才学习,还是不怎么懂,一开始都是看网上写的算法模版,下面的两种方法也是用了网上的模版的: 方法一: #include <iostream> #include<algorithm ...

  7. 有上下界网络流 ---- P4843 清理雪道(DAG图上最小路径重复边覆盖)【模板】有源汇上下界最小流

    题目链接 题目大意: 解题思路: 首先我们发现对于每条边至少要覆盖一次,最多覆盖无数次 那么就有点像上下界网络流了[1,INF][1,INF][1,INF]的限制关系 跑一边最小流就可以了!! #in ...

  8. 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流

    学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...

  9. 最大流 ---- 最小路径覆盖 ---- P2765魔术球问题(网络流24题)

    题目链接 解题思路: 这题题目看起来根本不像网络流但是确实用网络流做的 这个题目有两个限制 每个柱子上面的球相邻两个的和必须是平方数 球的编号必须是连续的 首先我们只考虑第一个条件的话,我们怎么转化成 ...

最新文章

  1. Linux常用命令的简单实用
  2. Log4J配置方式Java工程测试
  3. 长文综述:从大数据中寻找复杂系统的核心变量
  4. supesite之空间篇
  5. 一个项目经理的一些个人体会
  6. 学习NodeJS第一天:node.js引言
  7. Kotlin Weekly 中文周报
  8. 利用redis-sentinel+keepalived实现redis高可用
  9. LeetCode Assign Cookies
  10. HTML5安全风险详析之三:WebSQL攻击
  11. python自动化办公教程-Python自动化办公之操作Excel文件
  12. php 变量 unset,在PHP中unset变量
  13. Spring整合JsonRpc
  14. android手势解锁代码,纯android代码实现九宫格手势密码
  15. 文件上传服务器方法,向服务器上传文件方法
  16. 深度残差网络 ResNet
  17. 计算机网络拓扑图 模板,网络拓扑图绘制.doc
  18. 禁用计算机usb设备,电脑如何设置禁止使用USB设备以及电脑怎样屏蔽U盘使用功能...
  19. CSTC2021 WriteUp
  20. 写作小课堂:如何写好工作邮件?

热门文章

  1. 什么标准规定了aes加密_aes 128标准加密使用哪些字符
  2. Gated Recurrent Unit(GRU)
  3. 川大电子信息学院c语言复试,电子信息学院微机原理学姐经验分享给大家
  4. mysql 80070057_安装iis错误
  5. pdmreader 连接mysql_powerdesigner连接mysql,并导出其数据模型的方法
  6. C语言二维数组的初始化
  7. 利用机器学习(mediapipe),进行人手的21个3D手关节坐标检测
  8. 【Python3爬虫】下载酷狗音乐上的歌曲
  9. 从0开始制作微信投票系统(二):如何创建微信投票链接和二维码?
  10. python(5) softmax回归实例