hdu 3879 最大密集子图(点和边均带权)(模板)
/*
最大权闭合图,可以用最大密集子图来解速度更快复杂度低
题解:胡伯涛《最小割模型在信息学竞赛中的应用》
点和边均带权的最大密集子图
s-i,权为U=点权绝对值和+边的所有权值
i-t,权为U+点的值-点的度
u-v,权值为w,意思是选了v后可以获利多少
最大获利=(U*n-flow)/2;
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<algorithm>
using namespace std;
#define N 5100
#define NN 51000
#define inf 0x3fffffff
struct node {
int u,v,w,next;
}bian[NN*8];
int p[N],degree[N];
int head[N],yong,dis[N],work[N];
void init() {
yong=0;
memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int w) {
bian[yong].v=v;
bian[yong].w=w;
bian[yong].next=head[u];
head[u]=yong++;
}
int bfs(int s,int t)
{
memset(dis,-1,sizeof(dis));
queue<int>q;
q.push(s);
dis[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=bian[i].next)
{
int v=bian[i].v;
if(bian[i].w&&dis[v]==-1)
{
dis[v]=dis[u]+1;
q.push(v);
if(v==t)
return 1;
}
}
}
return 0;
}
int dfs(int s,int limit,int t)
{
if(s==t)return limit;
for(int &i=work[s];i!=-1;i=bian[i].next)
{
int v=bian[i].v;
if(bian[i].w&&dis[v]==dis[s]+1)
{
int tt=dfs(v,min(limit,bian[i].w),t);
if(tt)
{
bian[i].w-=tt;
bian[i^1].w+=tt;
return tt;
}
}
}
return 0;
}
int dinic(int s,int t)
{
int ans=0;
while(bfs(s,t))
{
memcpy(work,head,sizeof(head));
while(int tt=dfs(s,inf,t))
ans+=tt;
}
return ans;
}
int main() {
int n,m,i,s,t,U,u,v,w;
while(scanf("%d%d",&n,&m)!=EOF) {
U=0;
for(i=1;i<=n;i++) {
scanf("%d",&p[i]);
U+=abs(p[i]);
}
memset(degree,0,sizeof(degree));
init();
for(i=1;i<=m;i++) {
scanf("%d%d%d",&u,&v,&w);
U+=w;
degree[u]+=w;
degree[v]+=w;
addedge(u,v,w);
addedge(v,u,w);
}
s=0;t=n+1;
for(i=1;i<=n;i++) {
addedge(s,i,U);
addedge(i,s,0);
addedge(i,t,U+2*p[i]-degree[i]);
addedge(t,i,0);
}
printf("%d\n",(U*n-dinic(s,t))/2);
}
return 0;}
hdu 3879 最大密集子图(点和边均带权)(模板)的更多相关文章
- HDU 3038 How Many Answers Are Wrong 【YY && 带权并查集】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3038 How Many Answers Are Wrong Time Limit: 2000/1000 ...
- 【HDU 3038】 How Many Answers Are Wrong (带权并查集)
How Many Answers Are Wrong Problem Description TT and FF are ... friends. Uh... very very good frien ...
- hdu 5441 (2015长春网络赛E题 带权并查集 )
n个结点,m条边,权值是 从u到v所花的时间 ,每次询问会给一个时间,权值比 询问值小的边就可以走 从u到v 和从v到u算不同的两次 输出有多少种不同的走法(大概是这个意思吧)先把边的权值 从小到大排 ...
- 2017 计蒜之道 初赛 第三场 D. 腾讯狼人杀 (点边都带权的最大密度子图)
点边都带权的最大密度子图,且会有必须选的点. 求\(\frac{\sum w_e}{k*(2n-k)}\)的最大值,其中k为子图点数 设\[h(g) = \sum w_e - g*(2nk-k^2)\ ...
- poj 3155 二分+最小割求实型最小割(最大密集子图)
/* 最大密集子图子图裸题 解法:设源点s和汇点t 根据胡波涛的<最小割模型在信息学中的应用> s-每个点,权值为原边权和m, 每个点-t,权值为m+2*g-degree[i], 原来的边 ...
- hdu 5441 Travel 离线带权并查集
Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...
- HDU - 2255 奔小康赚大钱(最大带权匹配)
Problem Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓, ...
- HDU 5176 The Experience of Love 带权并查集
The Experience of Love Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- HDU 2255 奔小康赚大钱(带权二分图最大匹配)
HDU 2255 奔小康赚大钱(带权二分图最大匹配) Description 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子. 这可是一件大事,关系到人民的住房问题啊 ...
随机推荐
- C++ thread operator= 右值引用 vector foreach
这是 thread 的construct定义: default (1) thread() noexcept; initialization (2) template <class Fn, cla ...
- 基于ABP的Easyui admin framework正式开放源代码
下载&反馈:http://www.webplus.org.cn v1.0 (2016/9/21) EF6+MVC5+API2+Easyui1.4.2开发 后台管理不使用iframe,全ajax ...
- AJPFX简述JavaStringBuffer方法
以下是StringBuffer类支持的主要方法: 序号 方法描述 1 public StringBuffer append(String s)将指定的字符串追加到此字符序列. 2 public Str ...
- AJPFX浅谈Java性能优化之finalize 函数
★finalize 函数的调用机制 俺经常啰嗦:“了解本质机制的重要性”.所以今天也得先谈谈 finalize 函数的调用机制.在聊之前,先声明一下:Java虚拟机规范,并没有硬性规定垃圾回收该不该搞 ...
- DOM编程练习(慕课网题目)
编程练习 制作一个表格,显示班级的学生信息. 要求: 1. 鼠标移到不同行上时背景色改为色值为 #f2f2f2,移开鼠标时则恢复为原背景色 #fff 2. 点击添加按钮,能动态在最后添加一行 3. 点 ...
- Handler引起的内存泄露
一般我都写handler的时候是这样的: public class MyActivity extends Activity{ private final Handler myHandler = n ...
- Linux之基础命令——文件搜索
grep(匹配符合条件的字符串) 无参:显示匹配行 -c:显示匹配行数 -e 字符串:匹配特殊字符串,如-开头 -i:忽略大小写 -v:输出不匹配行 -w:匹配指定字符串 可以和别的命令通过" ...
- Swift中的init方法
摘要:Swift有着超级严格的初始化方法,不仅强化了designated初始化方法的地位,所有不加修饰的init方法都需要在方法中确保非Optional的实例变量被赋值初始化,而在子类中,也强制调用s ...
- Puppeteer-常规操作一
这里不讲 Puppeteer 怎么使用,主要讲一些常规操作在这里如何通过另类方法实现.等实现后,你就会感觉,嗯~~ 真香! 场景一 已经找出要的元素,现在有需求再继续寻找他的子元素 第一种.将父元素带 ...
- 环境变量HISTCONTROL命令及对快捷键Ctrl+o命令的影响
在linux中环境变量HISTCONTROL可以控制历史的记录方式. HISTCONTROL有以下的选项: ignoredups 默认,忽略重复命令 ignorespace ...