hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量

hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //灵活运用最大流量

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

3081 意甲冠军:

   n女生选择不吵架,他甚至男孩边(他的朋友也算。并为您收集过程)。2二分图,一些副作用,有几个追求完美搭配(每场比赛没有重复的每一个点的比赛)

   后。每次增广一单位,(一次完美匹配),再改动起点还有终点的边流量,继续增广。直到达不到完美匹配为止。网上非常多是用二分做的,我认为不是必需。

。。

(网上传播跟风真严重。。

非常多人都不是真正懂最大流算法的。。。

3277 :

  再附加一条件,每一个女孩能够最多与k个自己不喜欢的男孩。

求有几种完美匹配(同上)。

我认为:求出上题答案,直接ans+k就可以(大于n取n)。由于。最多是n种匹配。在限制的基础上,求出最大值,然后余下的k种,是任意连边的,总有完美匹配方案吧?当然不大于n,我是这样想的。不知道为什么WA。。

感觉没问题。。。网上大多是拆点,连自己不喜欢的边,跑最大流(盲目跟风解法,不经思考的人非常厌恶。。。吐槽几句:当我提出新解法的时候,有“牛”半秒内直接说显然错误。

然后又半天不解释。说:“二分+并查集+拆点+最大流,自己理解”….╮(╯▽╰)╭…呵呵)

3416: 求边不可反复最短路条数。

比較简单。跑最短路后,类似dp找出是最短路的边。加入流量为1。直接最大流。

代码3081:

#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<set>
#include<vector>
using namespace std;
const int inf=0x3f3f3f3f;
const int maxv=210,maxe=40000;
int nume=0;int head[maxv];int e[maxe][3];
void inline adde(int i,int j,int c)
{
    e[nume][0]=j;e[nume][1]=head[i];head[i]=nume;
    e[nume++][2]=c;
    e[nume][0]=i;e[nume][1]=head[j];head[j]=nume;
    e[nume++][2]=0;
}
int ss,tt,n,m,fr;
int vis[maxv];int lev[maxv];
bool bfs()
{
    for(int i=0;i<maxv;i++)
      vis[i]=lev[i]=0;
    queue<int>q;
    q.push(ss);
    vis[ss]=1;
    while(!q.empty())
    {
        int cur=q.front();
        q.pop();
        for(int i=head[cur];i!=-1;i=e[i][1])
        {
            int v=e[i][0];
            if(!vis[v]&&e[i][2]>0)
            {
                lev[v]=lev[cur]+1;
                vis[v]=1;
                q.push(v);
            }
        }
    }
    return vis[tt];
}
int dfs(int u,int minf)
{
    if(u==tt||minf==0)return minf;
    int sumf=0,f;
    for(int i=head[u];i!=-1&&minf;i=e[i][1])
    {
        int v=e[i][0];
        if(lev[v]==lev[u]+1&&e[i][2]>0)
        {
            f=dfs(v,minf<e[i][2]?

minf:e[i][2]); e[i][2]-=f;e[i^1][2]+=f; sumf+=f;minf-=f; } } if(!sumf) lev[u]=-1; return sumf;}int dinic(){ int sum=0; while(bfs())sum+=dfs(ss,inf); return sum;};int mapp[maxv][maxv];int fa[maxv+1];vector<set<int> >tos(maxv);int find(int x){ if(x==fa[x])return x; else fa[x]=find(fa[x]); return fa[x];}void read_build(){ int aa,bb; for(int j=0;j<m;j++) { scanf("%d%d",&aa,&bb); adde(aa,bb+n,1); mapp[aa][bb]=1; } for(int i=0;i<fr;i++) { scanf("%d%d",&aa,&bb); int xx=find(aa); int yy=find(bb); if(xx!=yy) { fa[xx]=yy; } } for(int i=1;i<=n;i++) { int tx=find(i); for(int es=head[i];es!=-1;es=e[es][1]) { if(es%2==0) tos[tx].insert(e[es][0]-n); } } for(int i=1;i<=n;i++) { int tx=find(i); set<int>::iterator it=tos[tx].begin(); for(;it!=tos[tx].end();it++) { if(mapp[i][*it]==0) { mapp[i][*it]=1; adde(i,(*it)+n,1); } } } for(int i=1;i<=n;i++) { adde(ss,i,1); adde(i+n,tt,1); } /* for(int i=0;i<=tt;i++) for(int j=head[i];j!=-1;j=e[j][1]) { printf("%d->%d:%d\n",i,e[j][0],e[j][2]); }*/}void init(){ nume=0; memset(mapp,0,sizeof(mapp)); ss=0;tt=2*n+1; for(int i=0;i<maxv;i++) { head[i]=-1;fa[i]=i;tos[i].clear(); }}int main(){ int T; scanf("%d",&T); for(int ii=1;ii<=T;ii++) { int tx; scanf("%d%d%d",&n,&m,&fr); init(); read_build(); int ans=0; while(dinic()==n) { ans++; for(int i=head[0];i!=-1;i=e[i][1]) { e[i][2]=1; e[i^1][2]=0; } for(int i=head[tt];i!=-1;i=e[i][1]) { e[i^1][2]=1; e[i][2]=0; } } printf("%d\n",ans); } return 0;}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117368.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月6日 下午8:00
下一篇 2022年1月6日 下午8:00


相关推荐

  • 【Fungus笔记】No.12:Load Scene(加载场景 / 转场)

    【Fungus笔记】No.12:Load Scene(加载场景 / 转场)实现游戏场景的加载和转换可以用到 Fungus 提供的 LoadScene 指令 nbsp nbsp nbsp nbsp nbsp StringVal 中填写需要的场景名称 LoadingImage 中引用加载或转场时的 Loading 画面 需要注意的是 场景只能是包含在 BuildSettiin 构建设置 中的场景 此外的场景无效 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 将需要的场景拖拽进入 Sc

    2026年3月16日
    2
  • Platform SDK February 2003 For VC6.0(ISO打包版)

    Platform SDK February 2003 For VC6.0(ISO打包版)最近编程需要使用到PlatformSDKFebruary2003ForVC6.0内的文件,于是就下载使用。发现网络上面都是给的微软的官方下载地址,并没有打包下载的地址,于是就顺手打包了以下所有的文件,保存为iso格式,方便使用。这里制作了一个新的启动安装向导PlatformSDKFebruary2003.iso下载地址:348Mhttp://pan.baidu.com/s/

    2022年5月4日
    55
  • 机器学习中,如何判断蕴含式值的真假?

    机器学习中,如何判断蕴含式值的真假?今天在机器学习碰到了概念学习的知识 里面涉及了很多离散数学的概念 因此挑比较重点 难点的地方来总结一下 设 P Q 为两个命题 我们称 P gt Q 为一个蕴含式 那么真值表如下所示 P Q P gt Q 1 0 0 1 1 1 0 1 1 0 0 1 下面我们来详细解释一下如何判断 P gt Q 的值到底是 1 还是 0 这里我们把 P 和 Q 赋予具体的命题 P 是 汤姆离散数学考了满分 Q 是 汤姆妈妈给汤姆买电脑 那么 P gt

    2026年3月17日
    2
  • 告别手写SQL?Cursor智能生成实战指南与避坑技巧

    告别手写SQL?Cursor智能生成实战指南与避坑技巧

    2026年3月15日
    3
  • android全屏显示隐藏状态栏_怎么调整手机状态栏的大小

    android全屏显示隐藏状态栏_怎么调整手机状态栏的大小状态栏全透明步骤:1,反编译SystemUI.apk2,SystemUI\res\layout\navigation_bar.xml找到将后面的android:background=”#FF000000″改为android:background=”#00000000″3,SystemUI\res\layout\status_bar.xml找到将后面的android:background=”@dra…

    2026年4月15日
    6
  • 8000401a错误解决方式(Excel)

    8000401a错误解决方式(Excel)前一阵子做开发须要用到Excel和Word编程,本人用的是Vista系统,开发环境是VS2005和Office2007,測试无不论什么问题,但是到部署的时候出现了一些令人非常头痛的问题,老是会出现比如:检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现下面错误:8000401a。的错误,在网上查…

    2022年7月25日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号