【2-sat】P4171 [JSOI2010] 满汉全席

P4171 [JSOI2010] 满汉全席 - 洛谷

大意:n个点 m个条件 形如m1,h32,满足n个条件

思路:2-sat 让m=0,h=1 ,然后转换为i m j h的建图,注意傻逼题目的数字可能是多位数 不能直接x[1]-'0'

#include <cstdio>
#include <stack>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#define ep emplace_back
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0);
const int N = 1e5+9;
using namespace std;
int trans(char x){
return x == 'm' ? 0 : 1;
}
//转换函数 把字符串的数字转换成数字
int num(string x){
int ans=0;
int len = x.size()-1;
for(int i=1 ; i<x.size();++i){
int ch =x[i]-'0';
ans+=ch*pow(10,len-1);
--len;
}
return ans;
}
int n, m;
int head[N], idx = 0;
int time__;
int low[N], dfn[N];
struct node{
int to, val, next;
} e[N<<2];
bool vis[N];
int scc[N], scc_cnt = 0;
void add(int u, int v, int val){
e[idx] = {v, val, head[u]};
head[u] = idx++;
}
void bd(){
cin >> n >> m;
for(int k = 1; k <= m; ++k){
string ch1, ch2;
cin >> ch1 >> ch2;
int i = num(ch1);
int j = num(ch2);
int a = trans(ch1[0]);
int b = trans(ch2[0]);
//printf("%d %d\n",i,j);
add(i + a * n, j + !b * n, 0);
add(j + b * n, i + !a * n, 0);
}
}
stack<int> st;
void tarjan(int u){
low[u] = dfn[u] = ++time__;
st.push(u);
vis[u] = 1;
for(int i = head[u]; i != -1; i = e[i].next){
int v = e[i].to;
if(!dfn[v]){
tarjan(v);
low[u] = min(low[u], low[v]);
}
else if(vis[v]){
low[u] = min(low[u], dfn[v]);
}
}
if(dfn[u] == low[u]){
scc_cnt++;
while(true){
int v = st.top();
st.pop();
vis[v] = 0;
scc[v] = scc_cnt;
if(u == v) break;
}
}
}
void clear(){
memset(head, -1, sizeof head);
memset(scc, 0, sizeof scc);
memset(vis, 0, sizeof vis);
memset(low, 0, sizeof low);
memset(dfn, 0, sizeof dfn);
while(!st.empty()) st.pop();
time__ = 0, idx = 0, scc_cnt = 0;
}
void solve(){
clear();
bd();
for(int i = 1; i <= 2 * n; ++i)
if(!dfn[i])
tarjan(i);
bool ok = 1;
for(int i = 1; i <= n; ++i){
if(scc[i] == scc[i + n]){
ok = 0;
break;
}
}
/* */
cout << (ok ? "GOOD" : "BAD") ;
cout<< "\n";
}
int main(){
ios;
int T = 1;
cin >> T;
while(T--){
solve();
}
return 0;
}
posted @   phrink  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示