BZOJ1562: [NOI2009]变换序列(匈牙利算法,字典序相关)
来源:互联网 发布:linux系统zip命令 编辑:程序博客网 时间:2024/05/16 16:57
传送门
题意:
对于
0,1,…,N−1 的N 个整数,给定一个距离序列D0,D1,…,DN−1 ,定义一个变换序列T0,T1,…,TN−1 使得每个i,Ti 的环上距离等于Di 。一个合法的变换序列应是0,1,…,N−1 的一个排列,任务是要求出字典序最小的那个变换序列。
题解:
一个合法的变换序列是一个完备匹配。那么先随便找一个完备匹配,再从前往后贪心选取边判断是否能重新构成完备匹配即可。时间复杂度
#include<bits/stdc++.h>using namespace std;inline int rd(){ char ch=getchar();int i=0,f=1; while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();} while(isdigit(ch)){i=(i<<1)+(i<<3)+ch-'0';ch=getchar();} return i*f;}const int Maxn=2e4+50;int n,ban[Maxn],mate[Maxn],vis[Maxn],vt;vector<int>v[Maxn];inline bool Hungry(int x){ vis[x]=vt; for(int j=0;j<v[x].size();++j){ int t=v[x][j]; if(ban[t]||(mate[t]!=-1&&vis[mate[t]]==vt))continue; if(mate[t]==-1||Hungry(mate[t]))return mate[x]=t,mate[t]=x,true; } return false;}int main(){ n=rd();memset(mate,-1,sizeof(mate)); for(int i=0;i<n;i++){ int d=rd(),x1=(i+d)%n,x2=(i-d+n)%n; v[i].push_back(x1+n);v[x1+n].push_back(i); if(x1!=x2)v[i].push_back(x2+n),v[x2+n].push_back(i); } for(int i=2*n-1;i>=0;i--)sort(v[i].begin(),v[i].end()); for(int i=0;i<n;i++){ if(!(++vt,Hungry(i))){printf("No Answer");return 0;} } for(int i=0;i<n;i++){ mate[mate[i]]=-1,mate[i]=-1; ++vt,Hungry(i); ban[i]=1;ban[mate[i]]=1; } for(int i=0;i<n-1;i++)printf("%d ",mate[i]-n); printf("%d",mate[n-1]-n);}
阅读全文
0 0
- BZOJ1562: [NOI2009]变换序列(匈牙利算法,字典序相关)
- 【bzoj1562】【noi2009】【变换序列】【匈牙利算法】
- 【bzoj1562】【[NOI2009]变换序列】匈牙利算法的性质利用
- [BZOJ1562][NOI2009]变换序列
- bzoj1562 [NOI2009]变换序列
- bzoj1562[NOI2009] 变换序列
- BZOJ1562: [NOI2009]变换序列
- 【NOI2009】bzoj1562 变换序列
- bzoj1562 NOI2009变换序列 二分图匹配(匈牙利)
- 【bzoj1562】 NOI2009—变换序列
- 【NOI2009】Bzoj1562 & Codevs1843 变换序列
- bzoj1562 [NOI2009]变换序列(二分图完美匹配+贪心)
- BZOJ 1562([NOI2009]变换序列-匈牙利算法)
- bzoj 1562: [NOI2009]变换序列 匈牙利算法
- [BZOJ1562]NOI2009变换序列|二分图匹配
- 【bzoj1562】 NOI2009 变换序列 二分图匹配
- BZOJ1562——[NOI2009]变换序列
- [bzoj1562][NOI2009]变换序列(贪心+dfs/二分图最大匹配)
- Maven的安装和配置(Windows)
- Django项目-数据库,模型创建
- Dubbo第一章:Dubbo-admin编译和Dubbo简单入门
- java、javascript、js、jsp的区别
- elasticsearch-索引性能优化技巧
- BZOJ1562: [NOI2009]变换序列(匈牙利算法,字典序相关)
- CF 155C. Hometask 思维+模拟.
- [ubuntu]安装配置jdk和eclipse新建 工程
- Oracle truncate、 delete、 drop区别
- [work]tensorflow Windows 安装
- 教你微信刷票怎么刷之微信刷票投票的方法『图文』
- IP/TCP/UDP 包头
- UE4踩坑总结
- java try-catch-finally的执行顺序