传送门1

传送门1

Solution

两道比较裸的题。。。

复习一下最大流和费用流的模板。

Code[bzoj 2768][JLOI 2010] 冠军调查

#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define MN 505
#define T 500
#define S 0
#define ME 200000
#define inf 0x3f3f3f3f
struct edge{int to,w,nex;}e[ME];
int hr[MN],cur[MN],en=1;
inline void ins(int f,int t,int w)
{
e[++en]=(edge){t,w,hr[f]};hr[f]=en;
e[++en]=(edge){f,0,hr[t]};hr[t]=en;
}
int d[MN],q[MN],top;
bool bfs()
{
memset(d,0,sizeof d);
register int i,j;
for(d[q[i=top=1]=S]=1;i<=top;++i)
for(j=hr[q[i]];j;j=e[j].nex)
if(e[j].w&&!d[e[j].to])
d[q[++top]=e[j].to]=d[q[i]]+1;
return d[T];
}
int dfs(int x,int f)
{
if(x==T) return f;
int used=0,w;
for(int i=cur[x];i;i=e[i].nex)
{
cur[x]=i;
if(d[e[i].to]==d[x]+1&&e[i].w)
{
w=dfs(e[i].to,min(e[i].w,f-used));
used+=w;e[i].w-=w;e[i^1].w+=w;
if(f==used) return used;
}
}
return d[x]=-1,used;
}
int ans=0;
void solve()
{
while(bfs())
{
memcpy(cur,hr,sizeof cur);
ans+=dfs(S,inf);
}
}
int main()
{
register int i,x,y,n=read(),m=read();
for(i=1;i<=n;++i) read()?ins(S,i,1):ins(i,T,1);
while(m--) x=read(),y=read(),ins(x,y,1),ins(y,x,1);
solve();return 0*printf("%d\n",ans);
}

Code[bzoj 1877][SDOI 2009]晨跑

#include<bits/stdc++.h>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
#define MN 505
#define ME 41000
#define inf 0x3f3f3f3f
struct edge{int to,w,c,nex;}e[ME];
int hr[MN],en=1,S,T;
inline void ins(int f,int t,int w,int c)
{
e[++en]=(edge){t,w,c,hr[f]}; hr[f]=en;
e[++en]=(edge){f,0,-c,hr[t]};hr[t]=en;
}
int d[MN],q[ME<<2],l,r;
bool inq[MN],vis[MN];
bool spfa()
{
memset(d,0x3f,sizeof d);
d[q[l=r=ME]=T]=0;inq[T]=true;
register int i;
while(l<=r)
{
int u=q[l++];inq[u]=false;
for(i=hr[u];i;i=e[i].nex)
if(e[i^1].w&&d[e[i].to]>d[u]-e[i].c)
{
d[e[i].to]=d[u]-e[i].c;
if(inq[e[i].to]) continue;
inq[e[i].to]=true;
d[e[i].to]<=d[q[l]]?q[--l]=e[i].to:q[++r]=e[i].to;
}
}
return d[S]!=inf;
}
ll mincost=0,maxflow=0;
int dfs(int x,int f)
{
vis[x]=true;
if(x==T) return f;
int used=0,w;
for(int i=hr[x];i;i=e[i].nex)
if(e[i].w&&d[e[i].to]+e[i].c==d[x]&&!vis[e[i].to])
{
w=dfs(e[i].to,min(e[i].w,f-used));
used+=w;e[i].w-=w;e[i^1].w+=w;
mincost+=1ll*w*e[i].c;
if(used==f) return f;
}
return used;
}
void solve()
{
while(spfa())
{
do
{
memset(vis,0,sizeof vis);
maxflow+=dfs(S,inf);
}while(vis[T]);
}
}
int main()
{
register int x,y,c,N=read(),M=read(),i;
for(i=1;i<=N;++i) ins(i,i+N,1,0);
while(M--) x=read(),y=read(),c=read(),ins(x+N,y,1,c);
S=1+N;T=N;
solve();return 0*printf("%lld %lld\n",maxflow,mincost);
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

[bzoj 2768]&[bzoj 1877]的更多相关文章

  1. 【BZOJ】【1877】【SDOI2009】晨跑

    网络流/费用流 费用流入门题……根本就是模板题好吗! 拆点搞定度数限制,也就是每个点最多经过一次……源点汇点除外. /***************************************** ...

  2. BZOJ 2768 冠军调查(最小割)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2768 题意:给出一个无向图,每个点有一个值0或者1.现在重新设置每个点的值0或者1.设重 ...

  3. BZOJ 2768: [JLOI2010]冠军调查 最小割

    2768: [JLOI2010]冠军调查 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2768 Description 一年一度的欧洲足 ...

  4. [BZOJ 2768] 冠军调查

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2768 Solution: 一道比较基础的最大流的题目 一般看到将点分为两类的题目就要往网 ...

  5. bzoj 2768: [JLOI2010]冠军调查

    #include<cstdio> #include<iostream> #define M 100000 #include<cstring> using names ...

  6. BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)

    BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...

  7. BZOJ 2002 && BZOJ 2409 LCT && BZOJ 3282 初步练习

    #include <cstdio> ; inline void Get_Int(int & x) { ; ') ch=getchar(); +ch-'; ch=getchar(); ...

  8. BZOJ 3670 && BZOJ 3620 && BZOJ 3942 KMP

    最近感到KMP不会啊,以前都是背板的现在要理解了. #include <iostream> #include <cstring> #include <cstdio> ...

  9. [PA2014] [BZOJ 3709]~[BZOJ 3719] 合集

    今天起尝试做套题喵~ (当然是因为被最大流的题目弄得恶心死了) 一共是 10 道题一道一道做 预计 3~4 内做完 尽情期待 [BZOJ 3709]Bohater 一眼就能感受到贪心的气息 因为很直观 ...

随机推荐

  1. 使用Docker发布Asp.Net Core程序到Linux

    CentOS安装Docker 按照docker官方文档来,如果有之前安装过旧版,先卸载旧版,没有的话,可跳过. sudo yum remove docker \ docker-client \ doc ...

  2. Windows Server 2012 R2上安装.Net4.6.1出错

    在Windows Server 2012 R2上安装.Net4.6.1时提示“你需要先安装对应于 KB2919355 的更新,然后才可在……”解决方式: 在官网下载更新包,下载地址:https://w ...

  3. 关于#error

    很简单的一个东西,但是感觉使用价值没有太大.实现了以下,结果如下: 执行到#error语句的时候直接停止编译,在下面输出设定好的错误信息. 来自为知笔记(Wiz)

  4. mysql表设计注意点

    [原创]面试官:讲讲mysql表设计要注意啥 需要设计一个主键 因为你不设主键的情况下,innodb也会帮你生成一个隐藏列,作为自增主键.所以啦,反正都要生成一个主键,那你还不如自己指定一个主键,在有 ...

  5. Apache常见interview

    Apache在Linux系统下的工作模式及特点?如何使Apache使用worker模式? prefork 是一种非线程.与派生的工作模式,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个 ...

  6. pandas(四)

    合并  merge,concat,join pd.merge(df1,df2,on=‘列名’,how='') df1.join(df2,how='outer',on='') pd.concat([df ...

  7. klia linux tools 使用方法整理

    第一部分  信息收集工具 1.Zenmap 和nmap 作用是一样的,只是使用的操作方式不一样, Zenmap使用 的GUI,nmap 是基于命令行的.在两个使用的命令是一样的. 使用SYN扫描  就 ...

  8. Python基础笔记一

    1. 分片的步长,默认为值1,表示为 xx[s:t:v] ----从索引s到索引t,每隔v,取对应索引位置的值 xx = 'hello,world' #从索引0-10,共11个字符 xx[2:] #从 ...

  9. 2019-ACM-ICPC-沈阳区网络赛-K. Guanguan's Happy water-高斯消元+矩阵快速幂

    2019-ACM-ICPC-沈阳区网络赛-K. Guanguan's Happy water-高斯消元+矩阵快速幂 [Problem Description] 已知前\(2k\)个\(f(i)\),且 ...

  10. CentOS阿里仓库停止openstack mitaka源服务报错------“No package centos-release-openstack-mitaka available.”

    之前学习了一个月的openstack的mitaka版本,部署完后放置一段时间,最近准备正式部署突然发现“No package centos-release-openstack-mitaka avail ...