这篇博客是从旧博客 WordPress 迁移过来,内容可能存在转换异常。
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2208
有人说用位状态压缩做,等会去试试。
我首先想到的时强连通分支,算出分支数,如果小于气球数,则OK,这里用了并查集的思想。
AC代码:
// Author: Tanky Woo
// Blog: www.WuTianQi.com
// Problem: HDOJ 2208 唉,可爱的小朋友
#include
#include
using namespace std;
int arr[15][15];
int root[15];
int N, M, K, tmp;
bool finish;
void dfs(int n, int m)
{
if(m > M)
return;
if(n == N)
{
finish = 1;
return;
}
for(int i=0; i> N >> M)
{
memset(arr, 0, sizeof(arr));
for(int i=0; i> K;
for(int j=0; j> tmp;
arr[i][tmp] = 1;
//arr[tmp][i] = 1;
}
}
if(M>=N || isOk())
cout << "YES" << endl;
else
cout << "NO" << endl;
}
}