二分图 crf的军训
来源:互联网 发布:tomy淘宝 编辑:程序博客网 时间:2024/04/28 06:01
这道题的数据(至少我们oj的)有问题!按照我下面的做法能够过数据,但并不是正解。(我在代码后面说一下这数据错哪里了。。)
二分图即可,也没必要拆点,其实只是把点视为两排,在左边一排向右边能连边的点连边(说白了就是左边点能放右边点后面),之后把右边点的link设为左边点。就这样。。考试时以为是dp,最后交了深搜。。。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;int n, ans=0, idc=0;int a[305][305],vis[305],l[305];struct Book{int x, y;}book[305];//inline bool cmp(Book x,Book y){return x.x==y.x?x.y>y.y:x.x>y.y;}inline int find(int x){ for(int i=1;i<=n;i++) if(!vis[i]&&a[x][i]) { vis[i]=1; if(!l[i]||find(l[i])) { l[i]=x; return 1; } } return 0;}int main(){ // freopen ("militarytraining.in", "r", stdin); // freopen ("militarytraining.out", "w", stdout); scanf("%d", &n); for(int i=1; i<=n; i++)scanf("%d%d", &book[i].x, &book[i].y); //sort(book+1, book+n+1,cmp); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j&&book[i].y>=book[j].y&&book[i].x>=book[j].x) a[j][i]=1; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); ans+=find(i); } printf("%d\n", n-ans);}
二分图只能处理无DAG的情况,若存在DAG,对于这道题也就是完全相等的书之间可以互相放,但这种环会形成把1放在2后,并且2在1后面的灵异现象。说白了就是不对。所以要么拆成2×n个点,或者缩掉所有相等的点。呵呵。。。。
阅读全文
1 0
- 二分图 crf的军训
- crf 的军训 (二分图匹配)
- crf 的视察 (二分答案)
- 我的军训生活
- 他们的军训
- 军训
- 军训
- 军训
- 军训
- 军训
- 军训的苦与甜
- NOIP模拟赛 军训(二分答案+单调队列优化DP)
- CRF(一):CRF++的简单使用
- CRF++的使用 CRF用于中文分词
- CRF++的简单使用
- CRF++的简单使用
- CRF++的简单使用
- CRF++的简单使用
- 无法复制文件“XXX\packages\ZeroMQ.4.1.0.22\build\i386\libsodium.so”,原因是找不到该文件
- PhoneGap或者Cordova框架下实现Html5中JS调用Android原生代码
- Sublime和SumatraPDF双向选择的设置方案
- Golang连接Oracle
- 多态小结
- 二分图 crf的军训
- iOS 8.4.1完美越狱工具发布:老设备福音
- C3P0连接池的配置方式
- Nero Platinum 2018 Suite中文免费版下载附安装教程
- java导出excel插入图片
- freeswitch 录音录像模块和内核
- 在一个排序数组中求一个数K出现的次数
- 西式计数法
- Cygwin各种情况下中文乱码终极解决方案