这提示是什么意思????

P4782 【模板】2-SAT

``` #include<bits/stdc++.h> using namespace std; const int maxn=2e6+10; struct edge{ int to,next; }e[maxn],e2[maxn]; int head[maxn],head2[maxn],cnt2=0,cnt=0,n,m; inline void add_edge(int s,int t,bool b){ if(b==1) { e[++cnt].next=head[s];e[cnt].to=t;head[s]=cnt; } else { e2[++cnt2].next=head2[s];e2[cnt2].to=t;head2[s]=cnt2; } } inline int get_num(int x,int b){ if(x<=n&&b==1)return x; else if(x<=n&&b==0)return x+n; else if(x>n&&b==1)return x; else return x-n; } vector<int>v; bool book[maxn]; int belong[maxn],temp=0; inline void dfs1(int s){ book[s]=1; for(register int i=head[s];i;i=e[i].next){ if(!book[e[i].to]){ dfs1(e[i].to); } } v.push_back(s); } inline void dfs2(int s){ book[s]=1; belong[s]=temp; if(s>n&&belong[s-n]==temp||s<=n&&belong[n+s]==temp){ cout<<"IMPOSSIBLE"; exit(0); } for(register int i=head2[s];i;i=e2[i].next){ if(!book[e2[i].to]){ dfs2(e2[i].to); } } } inline void scc(){ for(register int i=1;i<=n*2;++i){ if(!book[i]) dfs1(i); } memset(book,0,sizeof(book)); for(register int i=v.size()-1;i>=0;--i){ if(!book[v[i]]){ ++temp; dfs2(v[i]); } } } int main(){ int m; cin>>n>>m; for(register int i=1;i<=m;++i){ int ti,a,tj,b; cin>>ti>>a>>tj>>b; add_edge(get_num(ti,a),get_num(tj,!b),1); add_edge(get_num(tj,b),get_num(ti,!a),1); add_edge(get_num(tj,!b),get_num(ti,a),0); add_edge(get_num(ti,!a),get_num(tj,b),0); } scc(); for(register int i=1;i<=n;++i){ if(belong[i]==belong[i+n]){ cout<<"IMPOSSIBLE"; return 0; } } cout<<"POSSIBLE"<<endl; for(register int i=1;i<=n;++i){ if(belong[i]<belong[i+n]){ cout<<1<<" "; } else cout<<0<<" "; } return 0; } ```
by LonelinessMan @ 2018-11-23 20:40:19


t4个点!
by LonelinessMan @ 2018-11-23 20:40:28


|