Hdu 4619 简单图论
发布日期:2022-01-31 14:08:45
浏览次数:8
分类:技术文章
本文共 1113 字,大约阅读时间需要 3 分钟。
Hdu 4619 度数<=2的图最大匹配 可以求二分图的匹配 也可以dfs每个块的点数x,sum{(x+1)/2}【关键是将题目中的n+m条边作为点,在有公共点的两边(转化后是两点)之间连一条边】
#include#include #define N 2005struct edge{ int to,next;}e[N*100];int n,o,m,ans,t;int head[N];bool v[N];int map[105][105];void add(int x,int y){ // printf("!!!!!!!!%d %d\n",x,y); e[o].to=y; e[o].next=head[x]; head[x]=o++; e[o].to=x; e[o].next=head[y]; head[y]=o++;}void dfs(int now){ v[now]=1;t++; for (int k=head[now];k!=-1;k=e[k].next) if (!v[e[k].to])dfs(e[k].to);}void doit(){ int x,y; o=0;memset(head,255,sizeof(head)); memset(map,0,sizeof(map)); ans=0; for (int i=1;i<=n;i++) {scanf("%d%d",&x,&y); map[x][y]=i; map[x+1][y]=i; } for (int i=1;i<=m;i++) {scanf("%d%d",&x,&y); if (map[x][y]) add(map[x][y],n+i); if (map[x][y+1]) add(map[x][y+1],n+i); } memset(v,0,sizeof(v)); for (int i=1;i<=n+m;i++) if (!v[i]) { t=0; dfs(i); ans+=(t+1)/2; } printf("%d\n",ans);}int main(){ while (scanf("%d%d",&n,&m),n||m) doit(); return 0;}
转载地址:https://blog.csdn.net/chm517/article/details/9499563 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月24日 04时32分05秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
FileCombo怎么玩?Filecoin怎么赚?
2019-04-30
Filecoin的应用场景
2019-04-30
Filecoin要被五倍回收了吗??
2019-04-30
filecoin什么时候上线?
2019-04-30
“30岁”的网络该如何自救(上)
2019-04-30
又一浏览器集成IPFS,分布式影响力再扩大
2019-04-30
IPFS为何被视为“明天的网络”?
2019-04-30
ubuntu14.04升级的道与术
2019-04-30
ubuntu 16.04在CPU 模式下安装arrayfire
2019-04-30
wav2letter++ 环境安装记录
2019-04-30
语音特征提取学习笔记--对比kaldi、htk、w2l的语音提取过程。
2019-04-30
wav2letter++ 第一次training 日志
2019-04-30
从wav2letter中提取语音属性的代码
2019-04-30
用于分析tensorflow 网络图的工具对比介绍
2019-04-30
WINDOWS UBUNTU18.04lts 双系统安装
2019-04-30
tensorflow mini batch 训练中线程和队列数据输入的问题
2019-04-30
神经网络优化学习思考
2019-04-30
vue单页面组件
2019-04-30
vue反向代理使用
2019-04-30