I'm Telling the TruthHDU - 3729 匈牙利算法,DFS
Posted keepz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I'm Telling the TruthHDU - 3729 匈牙利算法,DFS相关的知识,希望对你有一定的参考价值。
思路
题意:该题主要说几个同学分别说出自己的名次所处区间,最后输出可能存在的未说谎的人数及对应的学生编号,而且要求字典序最大。
思路:刚刚接触匈牙利算法,了解的还不太清楚,附一个专门讲解匈牙利算法的博文,个人认为讲的比较清晰。
AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int T, n;
struct Stue
int l, r;
;
Stue per[60+10];
int vis[100000+10]; //判断该点是否访问过
int hon[60+10]; //用于记录未说谎的人的编号
int ok[100000+10]; //标记某点存在的学生编号,未有则默认为-1
bool dfs(int x)
if(x < 0)
return false;
for(int i = per[x].l; i <= per[x].r; i++)
if(!vis[i])
vis[i] = 1;
if(ok[i] == -1 || dfs(ok[i]))
ok[i] = x;
return true;
return false;
int main()
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
cin >> T;
while(T--)
cin >> n;
for(int i = 0; i < n; i++)
cin >> per[i].l >> per[i].r;
int cnt = 0;
memset(hon, 0, sizeof(hon));
memset(ok, -1, sizeof(ok));
for(int i = n - 1; i >= 0; i--) //从后往前,这样可以保证字典序最大
memset(vis, 0, sizeof(vis));
if(dfs(i))
hon[cnt++] = i;
cout << cnt << endl;
if(!cnt)
continue;
for(int i = cnt - 1; i > 0; i--)
cout << hon[i] + 1 << " ";
cout << hon[0] + 1 << endl;
以上是关于I'm Telling the TruthHDU - 3729 匈牙利算法,DFS的主要内容,如果未能解决你的问题,请参考以下文章
I'm Telling the TruthHDU - 3729 匈牙利算法,DFS
[React] Use the URL as the source of truth in React
The Truth About Threads(关于线程的真相 )
The Truth About Threads(关于线程的真相 )
I'm clever.I can climb the trees.I like to eat bananas是啥意思
The figurative meaning is that truth may require moderation by the notional application of "a g