[BZOJ]3495: PA2010 Riddle 2-SAT

来源:互联网 发布:社交网络的数据挖掘 编辑:程序博客网 时间:2024/05/17 08:29

Description
k个国家,几个城市,m条边。
要求每个国家有且仅有一个首都,每条边两端的城市至少要有一个首都。
判断是否有解, 有解输出“TAK”,无解输出”NIE”
1 < = k, N ,M , < =1000000。

题解:

直接建边的话边数太大,所以建多2n个点分别表示这个国家前n个城市中有没有首都,后n个城市中有没有首都。然后就比较简单了,建图自己想想应该就很清楚了。

代码:

#include<bits/stdc++.h>using namespace std;#define LL long long#define pa pair<int,int>const int Maxn=4000010;const int inf=2147483647;int read(){    int x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();    return x*f;}struct Edge{int y,next;}e[15000010];int last[Maxn],len=0;void ins(int x,int y){int t=++len;/*printf("edge %d %d\n",y,x);*/e[t].y=y;e[t].next=last[x];last[x]=t;}int low[Maxn],dfn[Maxn],id=0,top=0,sta[Maxn],bel[Maxn],cnt=0;bool in[Maxn];void Tarjan(int x){    low[x]=dfn[x]=++id;    in[x]=true;sta[++top]=x;    for(int i=last[x];i;i=e[i].next)    {        int y=e[i].y;        if(!dfn[y])Tarjan(y),low[x]=min(low[x],low[y]);        else if(in[y])low[x]=min(low[x],dfn[y]);    }    if(low[x]==dfn[x])    {        int i;cnt++;        do        {            i=sta[top--];            in[i]=false;            bel[i]=cnt;        }while(i!=x);    }}int n,m,k;int main(){    n=read(),m=read(),k=read();    for(int i=1;i<=m;i++)    {        int x=read(),y=read();        ins(y,x+n);ins(x,y+n);    }    for(int i=1;i<=k;i++)    {        int t=read(),u=-1;        for(int j=1;j<=t;j++)        {            int x=read();            ins(x+2*n,x);ins(x+3*n,x);            if(u!=-1)ins(x+2*n,u+2*n),ins(x+n,u+2*n),ins(u+3*n,x+3*n),ins(u+n,x+3*n);            u=x;        }    }    for(int i=1;i<=3*n;i++)if(!dfn[i])Tarjan(i);    bool flag=false;    for(int i=1;i<=n;i++)    if(bel[i]==bel[i+n]){flag=true;break;}    if(flag)puts("NIE");    else puts("TAK");}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 琥珀玉 龙虫 琥珀公司 琥珀怎么样 琥珀中药 什么的琥珀 琥珀图片价格 琥珀 作用 虫生 虫生真菌 绝地虫生 被迫虫生 都市虫皇 虫皇 虫皇主宰 虫皇进化系统 虫皇系统 末世虫皇 虫离念什么 虫离 八孔竖笛简谱虫儿飞 羌虫图片 虫羌读什么 虫群 虫族肉 阴虱虫肉眼看长什么样子 虫族雄子肉肉 黑暗大虫肉脚活体饮水机 心头肉 虫前有鸟 红虫肉夹馍 虫草花鸡汤 虫草功效 虫草怎么吃 虫草双参酒 虫草鸡汤 虫草花功效 虫草价格 虫草排骨汤 虫草图片 凉拌虫草 虫草花汤