CodeForces 228E The Road to Berland is Paved With Good Intentions 2Sat求解

这篇博客介绍了如何解决CodeForces 228E问题,即通过2Sat算法判断能否将一幅图的所有边变为1。文章详细解释了2Sat的思路,并给出了C语言实现的代码,包括图的构建、Tarjan算法、回溯染色等步骤。
摘要由CSDN通过智能技术生成
//CodeForces 228E The Road to Berland is Paved With Good Intentions 2Sat求解
/*
题目地址:
http://codeforces.com/problemset/problem/228/E

题意:
一幅图,100个点,最多10000条边,边权为0或1,
每次可以选择一个点,将与之相连的边取反(0变为1,1变为0)
问最后能不能将所有边变为1,若能,输出索取的点,否则,输出Impossible

思路:
2Sat
设	i为选这个点,i'为不选这个点
	j为选这个点,j'为不选这个点
枚举每一条边,
如果是0:	i->j'
			i'->j
			j->i'
			j'->i

如果是1:	i->j
			i'->j'
			j->i
			j'->i'

*/



#include<stdio.h>
#include<iostream>
#include<queue>
#include<string>
using namespace std;

#define N 205
#define M 40005

int stack[N], LOW[N], DFN[N], belong[N],head[N];
int top, cnt, tot, Index, num;
bool inStack[N];

int head1[N],degree[N],order[N],color[N],id[N],re[N];
int num1,nnum;

int n,m;

struct node{
	int from;
	int to;
	int val;
}s[M];

struct Edge{
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值