2021上海L Three,Three,Three(一般图匹配)
2021上海L Three,Three,Three(一般图匹配)
给定 所有点度数为3的无向图,将mmm条边 其分成m3\dfrac{m}{3}3m 条长度为333的链。
定理:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = {402653189,805306457,1610612741,998244353};
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr)
void Print(int *a,int n){for(int i=1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);
}
template <typename T> //x=max(x,y) x=min(x,y)
void cmx(T &x,T y){if(x<y) x=y;
}
template <typename T>
void cmn(T &x,T y){if(x>y) x=y;
}
struct Blossom_Tree{vector<int>e[N];queue<int>q;int mh[N],pre[N],s[N],id[N],vis[N],n,num;void init(int nn){ //初始化 n=nn,num=0;for(int i=1;i<=n;i++) e[i].clear(),mh[i]=pre[i]=vis[i]=s[i]=id[i]=0;}void add(int u,int v){e[u].push_back(v),e[v].push_back(u);}int find(int x){ return s[x]==x?x:s[x]=find(s[x]);}int LCA(int x,int y){ //求LCA. for(++num;;swap(x,y))if(x){if(id[x=find(x)]==num) return x;//在同一个奇环肯定能找到被编号的结点. id[x]=num,x=pre[mh[x]]; //沿增广路径的非匹配边向上走直到找到祖先. }}void blossom(int x,int y,int rt){ //缩点(开花) O(n)while(find(x)!=rt){pre[x]=y,y=mh[x];if(vis[y]==2) vis[y]=1,q.push(y);//如果奇环上有2型结点 就变为1型结点加入队列. if(find(x)==x) s[x]=rt;//只对根处理. if(find(y)==y) s[y]=rt;x=pre[y];}}bool aug(int st){ //求增广路径.O(n) for(int i=1;i<=n;i++) vis[i]=pre[i]=0,s[i]=i; while(!q.empty()) q.pop();q.push(st),vis[st]=1;while(!q.empty()){int u=q.front();q.pop();for(auto v:e[u]){if(find(u)==find(v)||vis[v]==2) continue;//如果是已经缩点了或者是偶环直接继续,没有影响. if(!vis[v]){ //如果没有被染色 vis[v]=2,pre[v]=u;if(!mh[v]){ //如果未被匹配,就进行匹配 for(int x=v,last;x;x=last) //增广路取反 last=mh[pre[x]],mh[x]=pre[x],mh[pre[x]]=x;return 1;}vis[mh[v]]=1,q.push(mh[v]); //否则将v的匹配结点染色,加入队列. }else{int rt=LCA(u,v); //找到LCA ,然后进行缩点. blossom(u,v,rt),blossom(v,u,rt);}}}return 0;}int cal(){int ans=0;for(int i=1;i<=n;i++) if(!mh[i]&&aug(i)) ans++; //最大匹配. return ans;}
}T;
int deg[N][N],n,m;
bitset<N>vis;
int que[N],tp;
int pre[N];
void dfs(int u){vis[u]=1;que[tp++]=u;for(int i=1;i<=n;i++) if(!vis[i]&°[u][i]) dfs(i);
}
int main(){scanf("%d%d",&n,&m);T.init(n);rep(i,1,m){int u,v;scanf("%d%d",&u,&v);deg[u][v]++,deg[v][u]++;T.add(u,v);}int ans=T.cal();if(ans*2!=n) return puts("IMPOSSIBLE"),0;rep(i,1,n) deg[i][T.mh[i]]--;//return 0;rep(i,1,n) if(!vis[i]){tp=0;dfs(i);for(int j=0;j<tp;j++)pre[que[j]]=que[(j+1)%tp];}rep(i,1,n)if(i<T.mh[i]){printf("%d %d %d %d\n",pre[i],i,T.mh[i],pre[T.mh[i]]);}return 0;
}
2021上海L Three,Three,Three(一般图匹配)相关推荐
- 2021上海益生产品(益生菌)展浅谈-益生菌对身体的21个好处
2021上海益生产品(益生菌)展浅谈-益生菌对身体的21个好处 1.益生菌在我们体内的重量超过我们的大脑 一般人的大脑重量约3磅,一个健康的人体将有超过3.5磅的益生菌和生物体(根据凯西亚当斯博士的事 ...
- 2021世界人工智能大会AI Debate:图神经网络是否是实现认知智能的关键?
来源:学术头条 2021年7月10日,WAIC(2021世界人工智能大会)"图神经网络与认知智能前沿技术论坛"在上海世博中心成功举办.清华大学计算机科学与技术系教授李涓子,复旦大学 ...
- 上海落户计算机水平毕业研究生,2021上海积分落户应届毕业生直接落户上海
原标题:2021上海积分落户应届毕业生直接落户上海 --上海落户积分120分,不是研究生毕业就有100分吗?研究生毕业就有100分,正常读书年龄肯定很小就有30分了啊,不是直接就可以落户了吗?为什么大 ...
- 2021上海软件和信息技术服务业百强榜单出炉:七牛云再登榜单
"十四五"以来,我国数字化转型逐步加快,一大批以软件和信息技术服务为代表的公司得到高速发展.在此背景下,以软件智能化为核心引领数字经济发展的优秀企业顺势而生,深度参与社会数字化建设 ...
- 提升技术认知,参加2021上海QCon技术大会
文章首发于公众号[看点代码再上班],欢迎围观,获取更多好文. 原文地址:提升技术认知,参加2021上海QCon技术大会! 全文共计6499字,预计阅读时间15分钟 目录 开篇 第一天-上午 签到&am ...
- 2021上海酵素展商讯-酵素人必备的常见酵素知识(及时收藏)
2021上海酵素展商讯-酵素人必备的常见酵素知识(及时收藏) 一.酵素不足的症状 1.容易感冒: 2.肌肉痛,关节痛,腰膝背痛: 3.持续便秘,腹泻或粪便黏腻恶臭: 4.皮肤粗糙,容易长各种痘痘: 5 ...
- 【报告分享】2021大中学生职业规划调查-新浪图数室头条(附下载)
摘要:#如何看待大学生期望薪资普遍较高#?大中学生职业规划调查:#00后高中生对入职薪资更乐观#!近期,@图数室 联合@微博校园 @微博中学 发布的"大中学生职业规划调查结果"显示 ...
- 2021年34省最新shp矢量图
数据集名称:2021年34省最新shp矢量图 时间范围:2021年 相关说明:矢量图是根据几何特性来绘制图形,矢量可以是一个点或一条线,矢量图只能靠软件生成,文件占用内在空间较小,因为这种类型的图像文 ...
- 2021上海燕窝、滋补品展浅谈中医对燕窝的研究:这6种情况吃燕窝,效果显著
2021上海燕窝.滋补品展浅谈中医对燕窝的研究:这6种情况吃燕窝,效果显著 2021世界燕窝展|上海滋补品展浅谈中医对燕窝的研究:这6种情况吃燕窝,效果显著~ 燕窝素有"东方珍品,稀世名药& ...
最新文章
- Thinkpad x230设置启动顺序
- Ext JS学习第十六天 事件机制event(一)
- 2021年11月软考准考证打印时间及操作步骤
- tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm.的一种解决方法
- 计算机错误2 找不到指定文件,无法执行目录中的文件 错误2系统找不到指定文件怎么办?...
- 首发量产1亿像素,小米新机宣布11月5日发布!
- 【洛谷 P1070】道路游戏 (DP)
- Leetcode 983.最低票价
- 端到端车道线检测_如何使用Yolov5创建端到端对象检测器?
- 计算机多媒体最新参考文献,计算机多媒体论文
- Ajax传json对象(jQuery)
- android 程序应用市场搜索关键字,安卓应用市场的搜索规则以及安卓应用市场ASO优化...
- Advanced Javascript outlining插件说明
- 机械臂技术参数的意义
- 窄带传输与LoRa扩频传输技术应用方案对比
- 解决谷歌浏览器被篡改主页问题
- sublime text3设置快捷键在浏览器中打开
- 西瓜错时上市销售,提高经济效益的背后是技术支持!
- vivo7.0系统手机最完美激活Xposed框架的教程
- 计算机硬件资源可,计算机硬件资源,Computer hardware resource,音标,读音,翻译,英文例句,英语词典...