답안 #56761

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
56761 2018-07-12T12:48:38 Z ramchandra Conspiracy (POI11_kon) C++14
20 / 100
3000 ms 132096 KB
#include <bits/stdc++.h>
#define fo(i,a,b) for(ll i=a;i<b;i++)
#define vc vector
#define us unordered_set
#define pb push_back
#define in(x) ll x;cin>>x;
//#define DEBUG
#ifdef DEBUG
	#define dbg(x) cerr<<#x<<": "<<x<<endl;
#else
	#define dbg(x)
#endif
using namespace std;
using ll = long long;
const ll M = 1e9+7;
int main(){
	in(n);
	//in(m);
	vc<us<ll>> g(n);
	/*fo(i,0,m){
		in(a);in(b);a--;b--;
		#define ad(x,y) g[x].insert(y);
		ad(a,b);ad(b,a);
	}*/
	fo(i,0,n){
		in(de);
		fo(j,0,de){
			in(v);v--;
			g[i].insert(v);
		}
	}
	vc<ll> t(n);
	vc<us<ll>> q(3);
	fo(i,0,n){q[0].insert(i);}
	#define set(v,tp) if(t[v]==0){dbg(v);dbg(tp);q[0].erase(v);ch=true;t[v] = tp;q[tp].insert(v);}
	bool ch = false;
	while(!q[0].empty()){
		fo(i,0,3){dbg(i);dbg(q[i].size());}
		ll x = *q[0].begin();
		set(x,1);
		while(ch){
			ch = false;
			for(ll v:q[1]){ for(ll u:g[v]){ set(u,2);}}
			q[1].clear();
			for(ll v:q[2]){ fo(u,0,n){ if(!g[v].count(u)){ set(u,1);}}}
			q[2].clear();
		}
	}
	fo(i,0,n){q[t[i]].insert(i);}
	//fo(i,0,n){cerr<<t[i]<<" ";}
	//cerr<<endl;
	vc<vc<us<ll>>> h(n,vc<us<ll>>(3));
	fo(i,0,n){
		for(ll v:g[i]){
			#define adz(x,y) h[x][t[y]].insert(y);
			adz(i,v);
			adz(v,i);
		}
	}
	bool ok = true;
	for(ll v:q[1]){
		if(!(h[v][1].size() == 0)){
			ok = false;
		}
	}
	for(ll v:q[2]){
		if(!(h[v][2].size() == q[2].size()-1)){
			ok = false;
		}
	}
	if(!ok){
		cout<<0<<endl;
		return 0;
	}
	//cerr<<endl;
	//fo(i,0,n){cerr<<"i: "<<g[i].size()<<endl;}
	#define g errro
	ll a1=0,b1=0,a2=0,b2=0;
	for(ll v:q[1]){	if(h[v][2].size() == q[2].size()){	a1++;}}
	for(ll v:q[2]){	if(h[v][1].size() == 0){	a2++;}}
	for(ll v:q[1]){
		if(h[v][2].size()==q[2].size()-1){
			for(ll x:q[2]){
				if(h[v][2].count(x)==0){
					if(h[x][1].size()==0){b1++;}
				}
			}
		}
	}
	for(ll v:q[2]){
		if(h[v][1].size() == 1){	
			ll x = *h[v][1].begin();
			if(h[x][2].size()==q[2].size()){b2++;}
		}
	}
	//cerr<<c[1]<<endl;cerr<<c[2]<<endl;cerr<<c[3]<<endl;
	//ll ans = (1*1+c[1]+c[2]+c[1]*c[3])%M;
	ll ans = 1+a1+a2+b1+b2;
	ans%=M;
	cout<<ans<<endl;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Incorrect 2 ms 376 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 452 KB Output is correct
2 Correct 4 ms 504 KB Output is correct
3 Incorrect 3 ms 560 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 748 KB Output is correct
2 Correct 7 ms 928 KB Output is correct
3 Incorrect 6 ms 1068 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 1068 KB Output is correct
2 Correct 19 ms 2656 KB Output is correct
3 Correct 14 ms 2656 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 2656 KB Output is correct
2 Correct 27 ms 4488 KB Output is correct
3 Correct 17 ms 4488 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 79 ms 7032 KB Output is correct
2 Incorrect 841 ms 62664 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 90 ms 62664 KB Output is correct
2 Correct 1063 ms 85544 KB Output is correct
3 Execution timed out 3019 ms 132096 KB Time limit exceeded
# 결과 실행 시간 메모리 Grader output
1 Runtime error 957 ms 132096 KB Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1798 ms 132096 KB Memory limit exceeded: We have a known bug that the memory usage is measured incorrectly (possibly because of Meltdown/Spectre patch), so your solution may be correct. Please submit again. Sorry for the inconvenience.
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3015 ms 132096 KB Time limit exceeded
2 Halted 0 ms 0 KB -