dfs(G[x][i]))return 0; return 1; } int solve(int m) { for(int i=0;i<m*2;i+=2){ if(!mark[i]&&!mark[i+1]) { c=0; if(!dfs(i)) { while(c>0) { mark[S[c]]=0; c-=1; } if(!dfs(i+1))return 0; } } } return 1; } int main(){ int n,m; scanf("%d...
Code: #include<cstdio>#include<algorithm>#include<vector>using namespace std;constintmaxn=3000;intc=0;intmark[maxn],S[maxn],from[maxn],to[maxn];vector<int>G[maxn];voidadd_edge(intx,inty){x=(x*2)+1,y=(y*2)+1;G[x-1].push_back(y);//里->外G[y-1].push_back(x);//...
int dfs(int x) { if(mark[x^1])return 0; if(mark[x])return 1; mark[x]=1; ++c; S[c]=x; int siz=G[x].size(); for(int i=0;i<siz;++i) if(!dfs(G[x][i]))return 0; return 1; } int solve(int m) { for(int i=0;i<m*2;i+=2){ if(!mark[i]&&!mark[i+1]...