题意是中文的,就不说了;
这里用到种类并查集,分别用1-N;N-2N,2N-3N代表城市,服务,人;
然后要注意这几点:
1:不要用rank数组了,因为连边要自己控制。
2:在unite函数的时候,比较一下x和y,控制把大的连到小的上面,这样之后寻味的时候,find()一定会找到最小的(城市),然后如果大于N,就说明他没有连到城市,输出0;
?
代码如下:
?
#include
#include
#include
#include
#include
#include
using namespace std; const int N = 300000; int par[999999], last[999999]; void init(int n) { int i, j; for (int i = 0; i
N) { printf("0\n"); continue; } printf("%d\n", temp); } } return 0; }
?