首页 > 其他分享 >HDU 3829 Cat VS Dog 猫和狗(二分图)结题报告

HDU 3829 Cat VS Dog 猫和狗(二分图)结题报告

时间:2023-08-14 21:12:19浏览次数:52  
标签:HDU ch int Dog Cat 结题 读入 505 getchar

听学长说这道题很ex,但是思路想到的话还是挺简单的。

可能是受上一道题(放置机器人)的启发,也是找互相冲突的点连线。

但是并不是完全一样(废话)放置机器人那道题是找到冲突点连线后直接求最大匹配即可。

这道题稍微把思路变换一下,求出最大完美匹配数 \(n\) 后,说明有 \(n*2\) 个人的喜好是互相冲突的。

可以认为这些人是重合的,所以我们只需要用总人数 \(k\) 减去 \(n\) 后就是最多人数。

做完以后上网搜发现都是用最大独立集做的,最后除以 \(2\) ,内涵原理应该是相同的(应该没有什么太大差异)。

附代码

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int read(){
    int x=0,f=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
    for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+(ch^48);
    return x*f;
}
void write(int x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);
    putchar(x%10+48);
}char s[505][3];vector<int>v[505];
bool vis[505];int match[505],shu[505][3];
inline bool dfs(int x){
    for(int i=0;i<v[x].size();++i){
        int y=v[x][i];
        if(!vis[y]){
            vis[y]=1;
            if(!match[y]||dfs(match[y])){
                match[y]=x;return true;
            }
        }
    }
    return false;
}
int main(){
    int n=read(),m=read(),k=read(),cnt=0;
    for(int i=1;i<=k;++i){
        s[i][1]=getchar(),shu[i][1]=read(),s[i][2]=getchar(),shu[i][2]=read();
    }
    for(int i=1;i<=k;i++)
        if(s[i][1]=='C'){
            cnt++;
            for(int j=1;j<=k;j++){
                if(s[j][1]=='D'){
                    if(shu[j][1]==shu[i][2]||shu[j][2]==shu[i][1])v[cnt].push_back(j);
                }
            }
        }
    int ans=0;
    for(int i=1;i<=cnt;++i){
        memset(vis,0,sizeof(vis));
        if(dfs(i))ans++;
    }write(k-ans);
    return 0;
}

核心代码就是读入和建图,读入时用字符数组记录即可,然后建图时是只要有一项冲突就进行连边,最后跑匈牙利即可。

标签:HDU,ch,int,Dog,Cat,结题,读入,505,getchar
From: https://www.cnblogs.com/SkadiDJS/p/17629755.html

相关文章

  • HDU7326 string magic(Easy Version)
    HDU7326stringmagic(EasyVersion)tag:回文自动机题目链接题意:多组样例,每组输入一字符串(长度1e5以内),输出满足下列条件的子串个数:该串由两个完全相同的回文串拼接而成做法:字符串的题目一般都比较板,洛谷的P4287可以说是这道题目的原题,我们先看看原题是怎么做的P4287双......
  • 制作catvsdog_path_dataset.tfrecords的代码 数据集制作完成路径为: E:\catanddog\t
    #-*-coding:utf-8-*--##PROJECT_NAME:081200#Name:01#Author:GG#Date:2023/8/12importtensorflowastfimportosimportnumpyasnpimportcv2file_dir="E:\\catanddog\\train0"save_dir="E:\\catanddog\\train1"images=[]#每张图片的路径......
  • hdu7365 0 vs 1
    0vs1首先如果两端不同肯定只能直接选。两端都选不了直接失败。不妨设现在是zero在选,从左边来010101交替,如果先出现了一个00比如01010100.....10那么我们就能从这边选,因为one只能跟着我们选这边,最后会出现两边都是0的情况。从右边来同理。假如是0101010交替,那么肯定是平......
  • HDU 多校 Round #6 题解
    HDU多校Round#6题解\(\text{ByDaiRuiChen007}\)A.CountProblemLink题目大意求有多少个长度为\(n\),字符集大小为\(m\)的字符串有长度为\(n-k\)的周期。数据范围:\(n,m,k\le10^{18}\)。思路分析\(k=n\)时答案为\(m^n\),否则转为有长度为\(k\)的Border,答案......
  • ## HDU7328 Snake
    HDU7328Snaketag:容斥,生成函数题目链接题意:1到n个数,分成m组,组队元素排列顺序不同则为不同的组,且每组元素个数不能超过k,问有多少种方案。容斥做法:暂且不管排列的事情,先把问题看成求n个球,m个盒子,盒子不能为空,且每个盒子中球数不能超过k。要保证每盒球数不超过k,我们可通过容......
  • HDU 暑假多校 2023 第六场
    目录写在前面733673417345733773397338写在最后写在前面补题地址:https://acm.hdu.edu.cn/listproblem.php?vol=64,题号7336~7346。哈哈,单刷5题,我是只会做套路题的飞舞。Boc'z那个单曲太牛逼了,最喜欢的一首,但是live上唱的这首是真难绷。以下按个人向难度排序。7336显然......
  • #轮廓线dp#HDU 1400 Mondriaan's Dream
    题目传送门分析状压dp会TLE,考虑用轮廓线dp,设\(dp[i][j][S]\)表示现在处理到\((i,j)\)这个位置轮廓线上状态为\(S\)的情况二进制位为1表示左边或者上方有骨牌跨过轮廓线,然后分类讨论转移一下即可代码#include<cstdio>#include<cstring>usingnamespacestd;con......
  • DPC WATCHDOG VIOLATION
    蓝屏SmbCo10X64.syshttps://answers.microsoft.com/zh-hans/windows/forum/all/%e6%9c%80%e8%bf%91%e7%94%b5%e8%84%91%e6%80%bb/d228ea4b-3945-4b1c-8c98-b1b3823d0213https://answers.microsoft.com/zh-hans/windows/forum/windows_11-windows_install/%e8%93%9d%e5%b1%8f/......
  • HDU7331 另解
    \[\begin{aligned}ANS&=\sum_{i=1}^n\binom{n}{i}p^i(1-p)^{n-i}\left(\sum_{j=1}^ij^m\right)&p=\frac{a}{b}\\&=\sum_{j=1}^nj^m\sum_{i=j}^n\binom{n}{i}p^i(1-p)^{n-i}\\&=\sum_{j=1}^n\sum_{k=0}^m{m\bracek}\binom{j}{k}k!\su......
  • HDU1151—Air Raid(最小路径覆盖)
    【\(HDU1151\)】—\(Air\)\(Raid\)(最小路径覆盖)题解描述给定一个\(DAG\)(有向无环图),选定最少的点,使得从这些点出发可以覆盖每一条路径(即每个点都经过至少一遍)。输入:24334132333131223输出21以测试数据为例,\(4\)个路口,\(3\)条路。现派伞兵经过所有......