传送门

一道最大密度子图的模板题

一道卡精度的神题

二分精度不能太大,网络流精度不能太小 (:

//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
const int N=12007;
typedef double LL;
const LL inf=1e18,eps=1e-12;
using namespace std;
int n,m,num;template<typename T>void read(T &x)  {char ch=getchar(); x=0; T f=1;while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') f=-1,ch=getchar();for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0'; x*=f;
}struct edge{int from,to,nx;LL cap,flow;edge(){}edge(int from,int to,LL cap,LL flow,int nx):from(from),to(to),cap(cap),flow(flow),nx(nx){}
}e[N];int ecnt=1,fir[N],dd[N];
void add(int u,int v,LL cap) {e[++ecnt]=edge(u,v,cap,0,fir[u]); fir[u]=ecnt;e[++ecnt]=edge(v,u,0,0,fir[v]); fir[v]=ecnt;
}queue<int>que;
int c[N],d[N],cur[N],p[N];
void bfs(int s,int t) {for(int i=0;i<=num;i++) d[i]=num,c[i]=0;que.push(t); d[t]=0;while(!que.empty()) {int x=que.front();que.pop();for(int i=fir[x];i;i=e[i].nx) {int y=e[i].to;if(d[y]==num&&e[i].cap==0) {d[y]=d[x]+1;que.push(y);}}}
}LL cal(int s,int t) {LL fl=inf;for(int i=t;i!=s;i=e[p[i]].from)fl=min(fl,e[p[i]].cap-e[p[i]].flow);for(int i=t;i!=s;i=e[p[i]].from) {if(p[i]==886||((p[i]^1)==886)) {int debug=1;}e[p[i]].flow=e[p[i]].flow+fl,e[p[i]^1].flow-=fl;}return fl;
}LL ISAP(int s,int t) {bfs(s,t);LL res=0;for(int i=1;i<=num;i++) c[d[i]]++,cur[i]=fir[i];for(int x=s;d[x]<num;) {if(x==t) {res+=cal(s,t);x=s;} int ok=0;for(int &i=cur[x];i;i=e[i].nx) if(e[i].flow+eps<=e[i].cap&&d[e[i].to]+1==d[x]) {ok=1; p[x=e[i].to]=i; break;}if(!ok) {cur[x]=fir[x]; int M=num;for(int i=fir[x];i;i=e[i].nx) if(e[i].flow+eps<=e[i].cap) M=min(M,d[e[i].to]+1);if(!(--c[d[x]])) break;c[d[x]=M]++;if(x!=s) x=e[p[x]].from;}}return res;
}int vis[N],ansnum;
void dfs(int x) {for(int i=fir[x];i;i=e[i].nx) if(!vis[e[i].to]&&e[i].cap-e[i].flow>=eps) { vis[e[i].to]=1;ansnum++;dfs(e[i].to);}
}int ee[N][2];int ck(LL mid,int o) {int s=n+1,t=n+2,res=0; num=t;ecnt=1;memset(fir,0,sizeof(fir));    for(int i=1;i<=m;i++) {add(ee[i][0],ee[i][1],1);add(ee[i][1],ee[i][0],1);}for(int i=1;i<=n;i++) {add(s,i,(LL)m);add(i,t,(LL)m+2.0*mid-dd[i]);}if(((LL)n*m-ISAP(s,t))/2.0>=eps) res=1;if(o==1) {memset(vis,0,sizeof(vis));  vis[s]=1; dfs(s);}return res;
}int main() {while(scanf("%d%d",&n,&m)==2) {if( m == 0 ) {  printf("1\n1\n") ;  continue ;  }memset(dd,0,sizeof(dd));for(int i=1;i<=m;i++) {read(ee[i][0]); read(ee[i][1]);dd[ee[i][0]]++; dd[ee[i][1]]++;}LL l=0,r=m;while(l+1e-5<=r) {LL mid=(l+r)/2.0;if(ck(mid,0)) l=mid;else r=mid;}ansnum=0;ck(l,1); printf("%d\n",ansnum);for(int i=1;i<=n;i++) if(vis[i]) printf("%d\n",i);}return 0;
}

View Code

转载于:https://www.cnblogs.com/Achenchen/p/8424457.html

POJ - 3155 Hard Life相关推荐

  1. POJ - 3155 Hard Life(最大密度子图)

    链接:POJ - 3155 Hard Life 题意: 给定一个含有nnn个结点,mmm条边的无向图GGG,找出其一个子图G′(V,E)G'(V,E)G′(V,E),其边的条数∣E∣|E|∣E∣和点的 ...

  2. POJ 3155 最大密度子图

    题意 传送门 POJ 3155 题解 算法思路 参考<最小割模型在信息学竞赛中的应用>.分数规划,求满足条件的 xxx 最大值 ∣E∣∣V∣≥x\frac{|E|}{|V|}\geq x∣ ...

  3. [POJ 3155] Hard Life

    描述 http://poj.org/problem?id=3155 一个公司内部共n个员工,员工之间可能曾经因为小事有了过节,总是闹矛盾.若员工u和员工v有矛盾,用边(u, v)表示,共m个矛盾.最近 ...

  4. poj pku图论、网络流入门题总结、汇总

    poj pku图论.网络流入门题总结.汇总 分类: acm图论 2010-08-25 18:49 243人阅读 评论(0) 收藏 举报 网络算法networkgraphconstructioninte ...

  5. POJ 图论分类 + DP(较全 自己又加了点)

    DP -----------动态规划 状态压缩DP 2411 (棋盘规模较大)状态压缩DP+DFS+滚动数组 2664 (棋盘规模较小)直接递推即可(DP) 2506 (棋盘规模较小)直接递推即可(D ...

  6. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  7. 计算方法(1~3章)

    写完这些程序还是很有感触的,以前从来没有考虑过误差之类的东西,认为double 16位的精度无所不能~ 又想起ac poj 3155那个纠结的时刻,把精度调高居然还wa了!!去问sphinx,他说他也 ...

  8. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  9. POJ ZOJ题目分类

    POJ,ZOJ题目分类(多篇整合版,分类很细致,全面) 标签: 题目分类POJ整理 2015-04-18 14:44 1672人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ACM资料(5) ...

最新文章

  1. SDWebImage使用,图片加载和缓存
  2. HashMap HashTable和ConcurrentHashMap的区别
  3. C语言getch()函数学习
  4. php随机数、时间、字符串函数,正则,数组函数
  5. 搭建 coreseek sphinx
  6. Anconda下的R语言
  7. 坐标偏差大_控制点的坐标复核(二)
  8. 【转】自然语言系列学习之表示学习与知识获取(三)知识图谱
  9. Taro+react开发(47)taro中消息机制
  10. For循环(十分重要)
  11. windows server 2012 分布式文件系统DFS介绍
  12. ORA-24042 ORA-12545 ORA-26714 bug(Bug 5623403)
  13. html做一个年份月份天数选择器,jquery编写日期选择器
  14. AfterEffect滤镜插件总目录
  15. windows无法格式化u盘_U盘修复无法格式化的解决方法
  16. js拆分百分数_计算百分比Javascript
  17. 如何从福彩官网抓取 双色球历史数据
  18. Channel 9视频整理【6】
  19. 四色印刷和专色印刷的区别是什么?
  20. table表格中使用插槽

热门文章

  1. 路由器的模式之间有什么区别
  2. 移植mp4v2开源库,h264+g711a/g711u编码mp4
  3. 氟离子选择性电极测定含氟牙膏中氟含量
  4. KAFKA 海量吞吐低延迟技术解密:KafkaController
  5. 2022最新好看的响应式高端图库网站系统模板
  6. python 2到100的素数_python输出2到100之间的素数
  7. 医学计算机专业考研,网评十大最痛苦专业:计算机、医学上榜
  8. 水质悬浮物是什么组成的有什么特性
  9. Non-local U-Nets for Biomedical Image Segmentation
  10. SpringBoot下使用ElasticSearch教程(一)