首页 > 其他分享 >生活的艰辛

生活的艰辛

时间:2022-12-19 20:46:57浏览次数:44  
标签:生活 int 艰辛 ne tot dep double now

生活的艰辛

思路

只能说是个结论,但是我不想推,也不想知道这么推导的,先记下吧。
大致就是二分枚举密度g,然后建图,已经有的关系为建立(1,1)
然后add(S,i,m,0),add(i,T,m+2g-in[i],0)
然后跑最小割,验证n
m-dinic(mid),大于0就变大,小于0就变小,因该是和01分数规划差不多的东i

代码

#include <bits/stdc++.h>
using namespace std;
const int N=110,M=1e5+5,inf=1e9;

int h[N],ne[M],e[M],tot=1;
double w[M];
void add(int from,int to,double w1,double w2) {
    e[++tot]=to;  w[tot]=w1;  ne[tot]=h[from];  h[from]=tot;
    e[++tot]=from;w[tot]=w2;  ne[tot]=h[to];    h[to]=tot;
}

int cur[N],dep[N],S=N-2,T=N-1;
bool bfs() {
    memset(dep,0,sizeof(dep));
    memcpy(cur,h,sizeof(h));
    queue<int>q;
    q.push(S);
    dep[S]=1;
    while(!q.empty()) {
        int now=q.front();
        q.pop();
        for(int i=h[now];i;i=ne[i]) {
            int to=e[i];
            if(dep[to]==0&&w[i]>0)
                dep[to]=dep[now]+1,q.push(to);
        }
    }
    return dep[T];
}

double dfs(int now,double sum) {
    if(now==T)return sum;
    double ans=0;
    for(int i=cur[now];i&&sum;i=ne[i]) {
        cur[now]=i;
        int to=e[i];
        if(dep[now]+1==dep[to]&&w[i]>0) {
            double k=dfs(to,min(sum,w[i]));
            if(k==0)dep[to]=0;
            w[i]-=k;
            w[i^1]+=k;
            sum-=k;
            ans+=k;
        }
    }
    return ans;
}

int n,m;
int x[M],y[M],in[M];
double dinic(double g) {
    memset(h,0,sizeof(h));
    tot=1;
    for(int i=1;i<=m;i++)add(x[i],y[i],1,1);
    for(int i=1;i<=n;i++)
        add(S,i,m,0),add(i,T,m+2*g-in[i],0);
    double ans=0;
    while(bfs())ans+=dfs(S,inf);
    return ans;
}

int main() {
    cin>>n>>m;
    for(int i=1;i<=m;i++) {
        cin>>x[i]>>y[i];
        in[x[i]]++;
        in[y[i]]++;
    }
    double l=0,r=m;
    while(r-l>1e-6) {
        double mid=(l+r)/2;
        if(m*n-dinic(mid)>1e-6)l=mid;
        else r=mid;
    }
    dinic(l);
    vector<int>v;
    for(int i=1;i<=n;i++)
        if(dep[i])v.push_back(i);
    if(v.size()==0)cout<<"1\n1";
    else {
        cout<<v.size()<<endl;
        for(auto x:v)cout<<x<<endl;
    }
    return 0;
}

标签:生活,int,艰辛,ne,tot,dep,double,now
From: https://www.cnblogs.com/basicecho/p/16993004.html

相关文章

  • 只要是做乙方,欧美白人也别想工作生活完全分开?
    只要是做乙方,欧美白人也别想工作生活完全分开?  笔者目前在为某个客户做SAP系统以及外围WMS系统的运维,主要是解决业务人员遇到的各种问题,处理他们创建的TICKET(Incident......
  • 【2022-12-13】生活需要期待
    20:00历史多么无情而又有情,不遗忘每一个对历史的贡献,也不宽容每一个对历史的障碍。                          ......
  • 生活中常见的一种低功耗高精度温湿度传感器
    温湿度传感器在生活中其实是很常见的,由于体积小,性能稳定等特点,被广泛应用在生产生活的各个领域。TSM-04TH则是一种以NB-IoT为通讯方式的温湿度传感器,由锂亚电池供电、具有......
  • 如果你把每一天都当作生命中最后一天去生活的话,那么有一天你会发现你是正确的
    在2005年那次已经成为经典的毕业演讲中,乔布斯曾讲到:当我21岁的时候,我读到了一句话:“如果你把每一天都当作生命中最后一天去生活的话,那么有一天你会发现你是正确的。”......
  • 探访“天芝鹿”新健康消费品牌,突破年轻活力,重新定义生活
    一、品牌介绍天芝鹿品牌隶属于康瑞生物,是一个集研发、生产、销售、服务于一体的大型健康产品企业。天芝鹿倡行“健康生活概念”,以“您的健康之路,天芝鹿来守护”为口号,以“突......
  • 人 · 车 · 生活,“云”上汽车的智能生活方式
    数字化转型是目前各行业企业面临的首要难点,为充分展示各行业在数字化转型中对云计算的不同需求与特有的转型经历,BoCloud博云推出了【数字化背后的云引擎】系列文章,涉及......
  • 2324. 生活的艰辛
    题目链接2324.生活的艰辛约翰是一家公司的CEO。公司的股东决定让他的儿子斯科特成为公司的经理。约翰十分担心,儿子会因为在经理岗位上表现优异而威胁到他CEO的位置......
  • 浅谈工作与生活分离的企业内部沟通软件
    现在很多年轻员工在工作的时候很容易出现拖拉现象,工作不能够按时完成或者是在工作时间做一些自己的私事,严重影响到了工作进度,老实说,所有的企业都希望自己的员工在上班时间能......
  • JSTL c标签,fn标签,fmt标签 - 生活在爪洼岛上
    jstl是sun定义的标准,由apache实现,所以要下载jar包的话去apache,要看api文档的话,去sun,API文档在此:​​http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html​......
  • 生活简单就是幸福
    人为财死,鸟为食亡,鸟为什么要为食亡?就因为它有一个肚子,不吃就只有饿死,饿死也是死,说来说去,都怪肚子。人也一样,想想人为什么而整日奔波?还不是因为要吃饭。人不比鸟......