HDU 3729 二分匹配 反向匹配
来源:互联网 发布:镕基软件股票 编辑:程序博客网 时间:2024/06/06 04:36
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3729
题意:
给定 n个学生 说的 自己 考试排名的 可能范围
确定最多几个人说真话
如果有多种答案,输出字典序最大的那种
这里字典序最大我们直接修改下二分匹配的匹配顺序即可
解法:
题目给定 点 映射到 数轴的区间 上, 问最多多少点可以成功映射到数轴上
很显然 点就是 x集 , 整个数轴 就是 y集 , 点对应的整个区间就是映射的边 ,所以直接有了一个二分图
//HDU 3729#include <bits/stdc++.h>using namespace std;const int maxn = 100010;const int maxm = 65;struct node{ int x, y;}E[maxm];int n;int match[maxm], Link[maxn];bool vis[maxn];bool dfs(int x){ for(int i = E[x].x; i <= E[x].y; i++){ if(!vis[i]){ vis[i] = 1; if(Link[i] == -1 || dfs(Link[i])){ Link[i] = x; match[x] = i; return true; } } } return false;}int work(){ memset(Link, -1, sizeof(Link)); memset(match, -1, sizeof(match)); int ans = 0; for(int i = n-1; i >= 0; i--){ memset(vis, 0, sizeof(vis)); ans += dfs(i); } return ans;}int main(){ int T; scanf("%d", &T); while(T--){ scanf("%d", &n); for(int i=0; i<n; i++){ scanf("%d%d", &E[i].x, &E[i].y); } int ans = work(); printf("%d\n", ans); for(int i = 0; i < n; i++){ if(match[i]!=-1){ ans--; printf("%d", i+1); if(ans) printf(" "); else printf("\n"); } } } return 0;}
0 0
- HDU 3729 二分匹配 反向匹配
- HDU 3729 二分匹配 反向匹配
- HDU 3729【二分匹配】
- HDU-3729 二分图匹配
- hdu 3729(二分匹配)
- HDU 3729 最大二分匹配
- HDU 3729 二分图匹配
- hdu 3729 二分图匹配
- hdu 1150 二分匹配
- hdu 1281 二分匹配
- hdu 3081 二分匹配
- HDU 1045 二分匹配
- HDU 1083 二分匹配
- hdu 2819 二分匹配
- hdu 1507 二分匹配
- hdu 1528 二分匹配
- hdu 1083 二分匹配
- hdu 2819(二分匹配)
- Spring MVC 环境搭建
- 温习HTML(四)
- 潜水员
- JSP入门_ONE
- 学习淘淘商城第二十一课(解决KindEditor上传图片不兼容的问题)
- HDU 3729 二分匹配 反向匹配
- 文章标题
- USACO 2.3 货币系统
- 金叉 mq4
- Radix Tree在Hyper中的实现:解读Hyper论文《 The Adaptive Radix Tree: ARTful Indexing for Main-Memory Databases 》
- 【bzoj 1305】[CQOI2009]dance跳舞
- 文章标题
- lower_bound和upper_bound算法
- 在action中定义的方法一定要注意的事项