hdu3062 Party

来源:互联网 发布:成人频道直播软件 编辑:程序博客网 时间:2024/04/30 06:23
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <stack>using namespace std;const int M = 2005;int ins[M];int dfn[M];int low[M];int sccf[M];vector<int>que[M];stack<int>s;int index, cont;int flag;int n, m;void init() {    int a, b, c, d;    index = 1;    cont = 0;    for(int i = 0; i < n*2; i++) {        que[i].clear();    }    for(int i = 0; i < m; i++) {        scanf("%d%d%d%d", &a, &b, &c, &d);        int u = a*2 + c;        int v = b*2 + d;        que[u].push_back(v^1);        que[v].push_back(u^1);    }}void Tanjian(int u) {    int v;    dfn[u] = low[u] = index++;      s.push(u);      ins[u] = 1;    for(int i = 0; i < que[u].size(); i++) {        v = que[u][i];        if(!dfn[v]) {            Tanjian(v);            low[u] = min(low[u], low[v]);        }        else if(ins[v]) {            low[u] = min(low[u], low[v]);        }    }    if(dfn[u] == low[u]) {        cont++;        do {            v = s.top();            s.pop();            sccf[v] = cont;            ins[v] = 0;        }while(v != u);    }}void solve() {    memset(ins, 0, sizeof(ins));    memset(low, 0, sizeof(low));    memset(dfn, 0, sizeof(dfn));    memset(sccf, 0, sizeof(sccf));    for(int i = 0; i < 2*n; i++) {        if(!dfn[i]) {            Tanjian(i);        }    }    flag = 1;    for(int i = 0; i < 2*n; i+= 2) {        if(sccf[i] == sccf[i^1]) {            flag = 0;            break;        }    }    if(flag)        printf("YES\n");    else        printf("NO\n");}int main(){  while(scanf("%d", &n) != EOF) {    scanf("%d", &m);    init();    solve();  }    return 0;}

原创粉丝点击