分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

[JSOI 2010] 满汉全席

发布时间:2023-09-06 02:11责任编辑:白小东关键词:暂无标签

[题目链接]

          https://www.lydsy.com/JudgeOnline/problem.php?id=1823

[算法]

         2-SAT

[代码]

#include<bits/stdc++.h>using namespace std;#define MAXN 110#define MAXM 1010struct edge{ ???????int to,nxt;} e[MAXM << 1];int timer,cnt,top,tot;int dfn[MAXN << 1],low[MAXN << 1],belong[MAXN << 1],s[MAXN << 1],head[MAXN << 1];bool instack[MAXN];template <typename T> inline void read(T &x){ ???????int f = 1; x = 0; ???????char c = getchar(); ???????for (; !isdigit(c); c = getchar()) if (c == ‘-‘) f = -f; ???????for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - ‘0‘; ???????x *= f;}inline void addedge(int u,int v){ ???????tot++; ???????e[tot] = (edge){v,head[u]}; ???????head[u] = tot; }inline void tarjan(int u){ ???????low[u] = dfn[u] = ++timer; ???????instack[u] = true; ???????s[++top] = u; ???????for (int i = head[u]; i; i = e[i].nxt) ???????{ ???????????????int v = e[i].to; ???????????????if (!dfn[v]) ???????????????{ ???????????????????????tarjan(v); ???????????????????????low[u] = min(low[u],low[v]); ???????????????} else if (instack[v]) low[u] = min(low[u],dfn[v]); ???????} ???????if (low[u] == dfn[u]) ???????{ ???????????????cnt++; ???????????????while (s[top + 1] != u) ???????????????{ ???????????????????????instack[s[top]] = false; ???????????????????????belong[s[top]] = cnt; ???????????????????????top--; ???????????????} ???????}}int main() { ???????????????int T; ???????read(T); ???????while (T--) ???????????????{ ???????????????int n,m; ???????????????read(n); read(m); ???????????????tot = 0; ???????????????for (int i = 1; i <= 2 * n; i++) head[i] = 0; ???????????????for (int i = 1; i <= m; i++) ???????????????{ ???????????????????????char a[20] , b[20]; ???????????????????????scanf("%s%s",a + 1,b + 1); ???????????????????????int t1 = 0 , t2 = 0; ???????????????????????for (int j = 2; j <= strlen(a + 1); j++) t1 = t1 * 10 + a[j] - ‘0‘; ???????????????????????for (int j = 2; j <= strlen(b + 1); j++) t2 = t2 * 10 + b[j] - ‘0‘; ???????????????????????if (a[1] == ‘m‘) addedge(t1 + n,t2 + (b[1] == ‘h‘) * n); ???????????????????????else addedge(t1,t2 + (b[1] == ‘h‘) * n); ???????????????????????if (b[1] == ‘m‘) addedge(t2 + n,t1 + (a[1] == ‘h‘) * n); ???????????????????????else addedge(t2,t1 + (a[1] == ‘h‘) * n); ???????????????} ????????????????timer = cnt = 0; ???????????????for (int i = 1; i <= 2 * n; i++) low[i] = dfn[i] = 0; ???????????????for (int i = 1; i <= 2 * n; i++) ???????????????{ ???????????????????????if (!dfn[i]) ???????????????????????????????tarjan(i); ???????????????} ???????????????bool ans = true; ???????????????for (int i = 1; i <= n; i++) ???????????????{ ?????????????????????if (belong[i] == belong[i + n]) ??????????????????????{ ?????????????????????????????ans = false; ?????????????????????????????break; ???????????????????????} ???????????????} ???????????????if (ans) printf("GOOD\n"); ???????????????else printf("BAD\n"); ???????} ???????????????return 0; ???}

[JSOI 2010] 满汉全席

原文地址:https://www.cnblogs.com/evenbao/p/9508025.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved