3648

/*
2SAT,找出一组解
逆缩图序,拓扑排序,然后染色。
找出和新娘颜色相同的点
*/// include file
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <ctime>#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <bitset>
#include <strstream>#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <set>
#include <list>
#include <functional>using namespace std;// typedef
typedef long long LL;
typedef unsigned long long ULL;// 
#define read freopen("in.txt","r",stdin)
#define write freopen("out.txt","w",stdout)
#define FORi(a,b,c) for(int i=(a);i<(b);i+=c)
#define FORj(a,b,c) for(int j=(a);j<(b);j+=c)#define FF(i,a)    for(int i=0;i<(a);i+++)
#define FFD(i,a)   for(int i=(a)-1;i>=0;i--)
#define Z(a) (a<<1)
#define Y(a) (a>>1)const double eps = 1e-11;
const double Pi = acos(-1.0);template<class T> inline T sqr(T a){return a*a;}
template<class T> inline T TMAX(T x,T y)
{if(x>y) return x;return y;
}
template<class T> inline T TMIN(T x,T y)
{if(x<y) return x;return y;
}
template<class T> inline void SWAP(T &x,T &y)
{T t = x;x = y;y = t;
}
template<class T> inline T MMAX(T x,T y,T z)
{return TMAX(TMAX(x,y),z);
}// code begin
#define MAXN 200vector<int> G[MAXN];
int NG[MAXN][MAXN];
int in[MAXN];
int col[MAXN];
vector<int> tp;
int link[MAXN];int scc;
int cnt;
int used[MAXN];
int stk1[MAXN],top1;
int stk2[MAXN],top2;
int isin[MAXN];
int dfn[MAXN];
int low[MAXN];
int id[MAXN];
int N,M;void gabow_scc(int i)
{used[i] = true;stk1[top1++] = i;stk2[top2++] = i;dfn[i] = cnt++;isin[i] = true;FORj( 0,G[i].size(),1 ){if(!used[ G[i][j] ]){gabow_scc(G[i][j]);}else if(isin[G[i][j]]){while(dfn[stk2[top2-1]]>dfn[G[i][j]])top2--;}}if(i==stk2[top2-1]){top2--;int w;do{w = stk1[--top1];isin[w] = false;id[w] = scc;}while(w!=i);scc++;}
}void tarjan_scc(int i)
{used[i] = true;stk1[top1++] = i;dfn[i] = cnt;low[i] = cnt;cnt++;isin[i] = true;FORj(0,G[i].size(),1){if(!used[ G[i][j] ]){tarjan_scc(G[i][j]);low[i] = TMIN(low[i],low[G[i][j]]);}else if(isin[G[i][j]]){low[i] = TMIN(low[i],dfn[G[i][j]]);}}if(dfn[i]==low[i]){int w;do{w=stk1[--top1];isin[w] = false;id[w] = scc;}while(w!=i);scc++;}
}void dfs(int i)
{FORj(1,scc,1){if( !col[j]&&NG[i][j] ){col[j]=2;dfs(j);}}
}int getnum(char *ta)
{int n = strlen(ta);if(n==3){return 2*( (ta[0]-'0')*10+ta[1]-'0' )+(ta[2]=='w'?0:1);}return 2*(ta[0]-'0')+(ta[1]=='w'?0:1);
}int main()
{read;write;while(scanf("%d %d",&N,&M)!=-1){if(N+M==0) break;FORi(0,N*4,1){G[i].clear();}// 新娘和新郎有限制条件G[2*0+1].push_back(2*0);G[2*1].push_back(2*1+1);FORi(2,N*2,2){// A xor B = 1;// i i+1G[2*i].push_back(2*(i+1)+1);G[2*(i+1)].push_back(2*i+1);G[2*(i+1)+1].push_back(2*i);G[2*i+1].push_back(2*(i+1));}// 通奸关系char s1[5],s3[5];while(M--){scanf("%s %s",s1,s3);// 不能是1 1 int a = getnum(s1);int b = getnum(s3);if(a>b) SWAP(a,b);//printf("%d %d\n",a,b);if(a>1&&b>1){G[2*a+1].push_back(2*b);G[2*b+1].push_back(2*a);}else if(a==1&&b>1){G[2*b+1].push_back(2*b);}else if(a==0&&b>1){//G[2*b+1].push_back(2*b);}}//memset(used,0,sizeof(used));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(id,0,sizeof(id));scc = 1;cnt = 1;top1 = 0;FORi(0,4*N,1){if(!used[i]){tarjan_scc(i);}}bool f = true;FORi(0,2*N,1){if(id[2*i]==id[2*i+1]){f=false;break;}}if(f){// 找一组方案FORi(1,scc,1){FORj(1,scc,1)NG[i][j]=0;}memset(in,0,sizeof(in));FORi(0,4*N,1){FORj(0,G[i].size(),1){if( id[i]!=id[G[i][j]] ){NG[ id[G[i][j]] ][ id[i] ] = 1;}}}FORi(0,2*N,2){//i i+1link[id[2*i]] = id[2*i+1];link[id[2*i+1]] = id[2*i];link[id[2*(i+1)]] = id[2*(i+1)+1];link[id[2*(i+1)+1]] = id[2*(i+1)];}//新图为NGtp.clear();queue<int> qi;FORi(1,scc,1){FORj(1,scc,1){if(i!=j && NG[i][j]){in[j]++;}}}FORi(1,scc,1){if(in[i]==0){qi.push(i);}}while(!qi.empty()){int cur = qi.front();qi.pop();tp.push_back(cur);FORi(1,scc,1){if(cur!=i && NG[cur][i]){in[i]--;if(in[i]==0)qi.push(i);}}}//printf("scc:%d tp:%d\n",scc,tp.size());// 排序后memset(col,0,sizeof(col));FORi(0,tp.size(),1){if(!col[tp[i]]){col[tp[i]]=1;//对立面col[link[tp[i]]] = 2;// 子孙dfs(link[tp[i]]);}}// 所有染的点就是一组解FORi(2,2*N,2){//i i+1//printf("颜色:[%d,%d] %d %d\n",i/2,(i+1)/2,col[id[2*i]],col[id[2*(i+1)]]);if(i!=2) printf(" ");if( col[id[2*i]]==col[id[2*0]]) printf("%d%c",i/2,(i&1)?'h':'w');if( col[id[2*(i+1)]]==col[id[2*0]]) printf("%d%c",(i+1)/2,((i+1)&1)?'h':'w');}printf("\n");}elseprintf("bad luck\n");}return 0;
}

转载于:https://www.cnblogs.com/ac2012/archive/2011/03/01/1968100.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

druiddatasource配置_Spring核心配置文件详解

点击蓝字“程序员考拉”欢迎关注&#xff01;1&#xff1a;spring的核心配置文件中的各种配置。 spring的核心配置文件的名字 叫做 applicationContext.xml&#xff0c;后期也可以通过配置文件中的配置修改名称&#xff0c;在web.xml中进行如下配置&#xff1a;<contex…

Linux两种定时器

Linux下的定时器有两种&#xff0c;以下分别介绍&#xff1a;     1、alarm     如果不要求很精确的话&#xff0c;用alarm&#xff08;&#xff09;和signal&#xff08;&#xff09;就够了     unsigned int alarm&#xff08;unsigned int seconds&#xff09;   …

origin(1)

origin窗口结构与布局 工作表 0.数据导入 0.1直接拖拽 0.2导入 配置相关参数 1.添加新列 1.1方法一 1.2方法二 2.设置x&#xff0c;y&#xff0c;z 2.1设置单列 2.2设置多列 2.3设置无关列 2.4设置误差线 2.5设置为标签 3.长短名称设置 3.1长名称设置 3.1.1方法一 3.1.2方…

Access 时间比较错误

原因 selete * from tab1 where addate>2010-12-24 14:07:44 拼接的时候改成 datetime dt datetime.now(); string sql "selete * from tab1 where addate>#"dt"#"; 把号换成#好就好了&#xff01;&#xff01;&#xff01;&#xff01;转载于:https…

神经网络与深度学习——TensorFlow2.0实战(笔记)(五)(Matplotlib绘图基础<散点图>python)

散点图&#xff08;Scatter&#xff09;&#xff1a; 是数据点在直角坐标系中的分布图 scatter() 函数 marker参数——数据点样式 添加文字——text() 函数 坐标轴设置 增加图例 绘制标准正态分布的散点图步骤 #散点图&#xff08;Scatter&#xff09;&#xff1a;是数据点在直…

十字路口红绿灯plc程序_实例讲解红绿灯PLC程序设计方法

十字路口的交通指挥信号灯布置如下图&#xff1a;一、控制要求&#xff08;1&#xff09;信号灯系统由一个启动开关控制&#xff0c;当启动开关接通时&#xff0c;该信号灯系 统开始工作&#xff0c;当启动开关关断时&#xff0c;所有信号灯都熄灭。&#xff08;2&#xff09;南…

listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果

题记—— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精。Flutter是谷歌推出的最新的移动开发框架。本实例运行效果如下 &#xff1a;//启动函数void main() { runApp(RootApp());}//根目录class RootApp extends StatelessWidget { ov…

神经网络与深度学习——TensorFlow2.0实战(笔记)(六)(Matplotlib绘图基础<折线图和柱状图>python)

折线图&#xff08;Line Chart&#xff09;&#xff1a; 散点图的基础上&#xff0c;将相邻的点用线段相连接 plot()函数 #折线图&#xff1a;在散点图的基础上将相邻两个点链接 #描述变量变化的趋势 #plot(x,y,color,marker,label,linewidth,markersize) #x数据点的x坐标 #y…

WinCE6.0的EBOOT概要

为一个新的硬件设备定制WinCE6.0操作系统&#xff0c;一般需要完成以下几个主要步骤&#xff1a; 1. 针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP)&#xff0c;BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动。…

Silverlight HTML5 Flash - RIA技术之三足鼎立

未来&#xff0c;“用户体验”将成为所有软件商业价值的首要衡量标准。拥有极好用户体验的RIA(富互联网应用)技术近些年来发展迅猛&#xff0c;其中以Silverlight、HTML5及Flash最受热捧。纵观&#xff0c;互联网上98%的计算机都有安装Flash&#xff1b;HTML5的新特性则强化了W…

将经纬度转换为以度为单位的xy坐标

(LEFT(A2,FIND("",A2)-1))MID(A2,FIND("",A2)1,FIND("′",A2)-FIND("",A2)-1)/60MID(A2,FIND("′",A2)1,FIND("″",A2)-FIND("′",A2)-1)/3600 (LEFT(B2,FIND("",B2)-1))MID(B2,FIND("&…

python i开发工具_Python轻量级开发工具Genay使用

Genay是一个轻量级的免费&#xff0c;开放源代码的开发工具&#xff0c;支持很多的文件类型&#xff0c;并且支持很多的插件&#xff0c;启动快速。安装包只有十几兆&#xff0c;相比pycharm专业版需要收费&#xff0c;并且社区版的安装包大小有两百多兆&#xff0c;对于python…

wince 常见问题 1

1 在mediaplayer全屏播放的时候&#xff0c;我可以用键盘上的某一个键调节声音大小&#xff0c;现在我想在屏幕上显示调节的结果就跟我们看电视一样能出来一些标记。当声音变大在屏幕上就增多&#xff0c; 当声音变小的时候就减少 得到播放窗口的DC&#xff0c;然后在上面显示…

高服从编纂器 VIM-操作篇(1)

Toy Posted in Featured Post, Text Editor, Tutorials固然从好久前就开始用 VIM 了&#xff0c;但不绝都是半调吊子&#xff0c;翻来覆去只用自身会的饬令。最近为了提高誊写代码的服从&#xff0c;另有 coding 时分的兴味&#xff0c;又从新研讨了一下 VIM&#xff0c;发明白…

S3C2440 WINCE6将USB DEVICE改成USB HOST,实现两个USB HOST

S3C2440一般默认的是一个USB DEVICE&#xff0c;一个USB HOST&#xff0c;即一个主口&#xff0c;一个从口&#xff0c;先来看看USB Device与USB Host相关知识。 USB Host&#xff1a; 最底层就是USB Host控制器了&#xff0c;上层是USB Host Controller Driver&#xff0c;该…

累积分布函数_C7: 概率函数和分布函数Distribution Function

》》点赞&#xff0c;收藏关注&#xff0c;理财&技术不迷路《《以下定义都是针对离散型随机变量的&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;概率质量函数Probability Mass Function PMF&#xff08;只有离散型有&#xff09;&#xff1a;概率函数&…

arcgis拆分多部件要素

我们在项目中经常会遇到明明是多个要素&#xff0c;结果偏偏是一个&#xff0c;如下图 解决: 1.开启编辑 2.在编辑器中打开高级编辑 3.点击要拆分的要素&#xff0c;进行拆分多部件要素 4.拆分结果如下

维护IBM DB2数据库所应领会的基本常识-8

81.表的类型有哪些? 基本表 后果表 撮要表 类型表 子类型 子表 声明的暂且表 琐屑暂且表 82.怎样定义序列? CREATESEQUENCEORDERSEQSTARTWITH1INCREMENTBY1NOMAXVALUENOCYCLECACHE24 83.怎样将表置于检查挂起形态? SETINTEGRITYTABLE_NAMEOFF    84.怎样取得…

wince6.0驱动开发

1、基础知识&#xff1a; 1&#xff09;系统调用是操作系统内核和应用程序之间的接口&#xff0c;设备驱动程序是操作系统内核和机器硬件之间的接 口。设备驱动程序为应用程序屏蔽了硬件细节&#xff0c;在应用程序看来硬件只是一个设备文件&#xff0c;应用程序可以 像操作普通…