2419 Forests

問題概要

人iが「木jから音がした」と言っているというリストが与えられる。
このとき、音がしている木の集合は何通り存在するか。

解法

問題文が理解不能だが、EPOCHの予選問題みたいなことをやればよいらしい。
音を聞いたかを適当に構造体に格納して、setに入れて個数を数える。

ソースコード

struct S{
	ll b[2];
	void set(int i){
		if(i<64)b[0]|=1ll<<i;
		else b[1]|=1ll<<i-64;
	}
	bool operator<(S const &r)const{
		if(b[0]!=r.b[0])return b[0]<r.b[0];
		return b[1]<r.b[1];
	}
};
int t,p;
S h[100];
set<S> s;

int main()
{
	scanf("%d%d",&p,&t);
	rep(i,t)h[i].b[0]=h[i].b[1]=0;
	
	int a,b;
	while(~scanf("%d%d",&a,&b))h[a-1].set(b-1);
	rep(i,p)s.insert(h[i]);
	printf("%d\n",s.size());
	
	return 0;
}