bzoj3678 Katu Puzzle

来源:https://www.cnblogs.com/wxyww/archive/2019/04/29/poj3678.html
-Advertisement-
Play Games

題意 給定一張圖,對於每條邊給出一個運算符$(\&,|,\otimes)$和一個值$c(0 \le c \le 1)$。問能否 ...


題目鏈接

題意

給定一張圖,對於每條邊給出一個運算符\((\&,|,\otimes)\)和一個值\(c(0 \le c \le 1)\)。問能否通過給每個點賦上一個值。使得每條邊通過指定的運算都能得到指定的值。

思路

\(2-sat\)問題,需要註意的是當兩數\(\&\)起來為\(1\)時。必須全部為\(1\),所以就從每個點的\(0\)\(1\)連邊。同理,當兩數\(|\)起來為\(0\)時,必須全部為\(0\),所以就從每個點的\(1\)\(0\)連邊。

代碼

/*
* @Author: wxyww
* @Date:   2019-04-27 16:42:24
* @Last Modified time: 2019-04-27 17:09:58
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 3000 + 10,M = 5000000 + 100;
ll read() {
    ll x=0,f=1;char c=getchar();
    while(c<'0'||c>'9') {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9') {
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}
struct node {
    int v,nxt;
}e[M];
int head[N],ejs;
void add(int u,int v) {
    e[++ejs].v = v;e[ejs].nxt = head[u];head[u] = ejs;
}
char s[5];
int sta[N],dfn[N],top,coljs,cnt,vis[N],low[N],col[N];
void tarjan(int u) {
    dfn[u] = low[u] = ++cnt;
    sta[++top] = u;
    vis[u] = 1;
    for(int i = head[u];i;i = e[i].nxt) {
        int v = e[i].v;
        if(!dfn[v]) {
            tarjan(v);
            low[u] = min(low[u],low[v]);
        }
        else if(vis[v]) low[u] = min(low[u],low[v]);
    }
    if(low[u] == dfn[u]) {
        ++coljs;
        do {
            int x = sta[top--];
            col[x] = coljs;
            vis[x] = 0;
        }while(sta[top + 1] != u);
    }
}
int main() {
    int n = read(),m = read();
    for(int i = 1;i <= m;++i) {
        int u = read() + 1,v = read() + 1,w = read();
        scanf("%s",s + 1);
        if(s[1] == 'O') {
            if(w)   add(u,v + n),add(v,u + n);
            else  add(u + n,u),add(v + n,v);
        }
        else if(s[1] == 'X') {
            if(w) add(u,v + n),add(u + n,v),add(v + n,u),add(v,u + n);
            else add(u,v),add(u + n,v + n),add(v,u),add(v + n,u + n);
        }
        else {
            if(w) add(u,u + n),add(v,v + n);
            else add(u + n,v),add(v + n,u);
        }
    }
    for(int i = 1;i <= n + n;++i) if(!dfn[i]) tarjan(i);
    for(int i = 1;i <= n;++i) {
        if(col[i] == col[i + n]) {
            puts("NO");return 0;
        }
    }
    puts("YES");
    return 0;
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、封裝 封裝:是面向對象方法的重要原則,就是把對象的屬性和行為(數據)結合為一個獨立的整體,並儘可能隱藏對象的內部實現細節,就是把不想告訴或者不該告訴別人的東西隱藏起來,把可以告訴別人的公開,別人只能用我提供的功能實現需求,而不知道是如何實現的。增加安全性 以上 Person 類封裝 name、g ...
  • 文章首發: "結構型模式:裝飾模式" 七大結構型模式之四:裝飾模式。 簡介 姓名 :裝飾模式 英文名 :Decorator Pattern 價值觀 :人靠衣裝,類靠裝飾 個人介紹 : Attach additional responsibilities to an object dynamicall ...
  • 這幾天在家,複習了了一下 Java SE ,到面向對象那邊找了個簡單數組項目做了一下,還是有收穫的。 只為記錄,好記性不如爛筆頭 有誤請指正 ありがとうございます。 我的公眾號 作者:晨鐘暮鼓c個人微信公眾號:程式猿的月光寶盒 1.首先,項目是客戶信息管理系統,需求如下: 2.涉及知識點 Ø 類結構 ...
  • 鑒於最近跟小伙伴聊了很多PHP架構發展方向的問題,相關技術整理了一下,也順便規划了一下自己的2019年。 一.常用的設計模式以及使用場景 以下是我用到過的 工廠,單例,策略,註冊,適配,觀察者,原型,裝飾器,facade,loc,pipeline 二.閱讀一個框架源碼 例如:laravel 三.常用 ...
  • 1.1 你是如何認識新事物的? 一般而言,從過往的見多的事物中,總結->推斷->所屬類別->認知行為。 1.2 類(Class)的概念 類是對一組具有共同特征和行為的對象的抽象描述。 理解 [1]類是專門用於描述現實生活中的事物的。 [2]類描述的事物都具有共同的特征和行為。 [3]類就是我們通常所 ...
  • 本人是做java web開發的,已經工作兩年了。一直都是自己學習學技術,昨天突然靈光一現,覺得自己應該有一個自己的博客。以後我會不定時的在博客上更新一些自己學習掌握的技術。以前都沒有過這樣書面性的給別人講解技術的經驗,可能有什麼寫的不到位的地方,請大家能夠給我指出來說明一下,我會加以改正。大家一起努 ...
  • 思路 首先以那個環為框架,把所有的邊連出來。如果有兩條邊相交,那麼就把其中一條放到環外面去。 ...
  • 一直以來Base64演算法的加密解密都是使用sun.misc包下的BASE64Encoder及BASE64Decoder來進行的。但是這個類是sun公司的內部方法,並沒有在Java API中公開過,不屬於JDK標準庫範疇,但在JDK中包含了該類,可以直接使用。但是在Eclipse和MyEclipse中 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...