【刷題】BZOJ 4195 [Noi2015]程序自動分析

Description

在實現程序自動分析的過程中,常常需要判定一些約束條件是否能被同時滿足。

考慮一個約束滿足問題的簡化版本:假設x1,x2,x3,…代表程序中出現的變量,給定n個形如xi=xj或xi≠xj的變量相等/不等的約束條件,請判定是否可以分別為每一個變量賦予恰當的值,使得上述所有約束條件同時被滿足。例如,一個問題中的約束條件為:x1=x2,x2=x3,x3=x4,x1≠x4,這些約束條件顯然是不可能同時被滿足的,因此這個問題應判定為不可被滿足。

現在給出一些約束滿足問題,請分別對它們進行判定。

Input

輸入文件的第1行包含1個正整數t,表示需要判定的問題個數。注意這些問題之間是相互獨立的。

對于每個問題,包含若干行:

第1行包含1個正整數n,表示該問題中需要被滿足的約束條件個數。

接下來n行,每行包括3個整數i,j,e,描述1個相等/不等的約束條件,相鄰整數之間用單個空格隔開。若e=1,則該約束條件為xi=xj;若e=0,則該約束條件為xi≠xj。

Output

輸出文件包括t行。

輸出文件的第k行輸出一個字符串“YES”或者“NO”(不包含引號,字母全部大寫),“YES”表示輸入中的第k個問題判定為可以被滿足,“NO”表示不可被滿足。

Sample Input

2
2
1 2 1
1 2 0
2
1 2 1
2 1 1

Sample Output

NO
YES

HINT

在第一個問題中,約束條件為:x1=x2,x1≠x2。這兩個約束條件互相矛盾,因此不可被同時滿足。

在第二個問題中,約束條件為:x1=x2,x2=x1。這兩個約束條件是等價的,可以被同時滿足。

1≤n≤1000000

1≤i,j≤1000000000

Solution

水題一道
由于等號具有連續性,所以先處理所有相等的限制,用并查集維護哪些是相等的
然后判斷不等號,如果有不等號兩邊在同一并查集內,顯然就不行

#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
#define REP(a,b,c) for(register int a=(b),a##end=(c);a<=a##end;++a)
#define DEP(a,b,c) for(register int a=(b),a##end=(c);a>=a##end;--a)
const int MAXN=400000+10;
int T,n,fa[MAXN],lt;
std::vector<int> V;
std::map<int,int> M;
struct node{int x,y,opt;inline bool operator < (const node &A) const {return opt>A.opt;};
};
node limit[MAXN];
template<typename T> inline void read(T &x)
{T data=0,w=1;char ch=0;while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();if(ch=='-')w=-1,ch=getchar();while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline void discretization()
{V.clear();M.clear();REP(i,1,n)V.push_back(limit[i].x),V.push_back(limit[i].y);std::sort(V.begin(),V.end());V.erase(std::unique(V.begin(),V.end()),V.end());REP(i,0,V.size()-1)M[V[i]]=i+1;lt=V.size();REP(i,1,n)limit[i].x=M[limit[i].x],limit[i].y=M[limit[i].y];
}
inline int found(int x)
{if(fa[x]!=x)fa[x]=found(fa[x]);return fa[x];
}
int main()
{read(T);while(T--){read(n);REP(i,1,n){int x,y,opt;read(x);read(y);read(opt);limit[i]=(node){x,y,opt};}discretization();std::sort(limit+1,limit+n+1);REP(i,1,lt)fa[i]=i;int mk=1;REP(i,1,n){int u=limit[i].x,v=limit[i].y;if(limit[i].opt)fa[found(u)]=found(v);else if(found(u)==found(v)){mk=0;break;}}puts(mk?"YES":"NO");}return 0;
}

轉載于:https://www.cnblogs.com/hongyj/p/9688387.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451216.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451216.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451216.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql 5.5 安裝配置方法圖文教程

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 回憶一下mysql 5.5 安裝配置方法&#xff0c;整理mysql 5.5 安裝配置教程筆記&#xff0c;分享給大家。 MySQL下載地址&#xff1a;htt…

git解除與遠程分支的關聯

在工作中&#xff0c;經常需要將同一份代碼傳到不同的git倉庫中去 如果本地同樣一份代碼&#xff0c;已經關聯了一個與遠程分支&#xff0c;那么怎么才能解除原程分支&#xff0c;并關聯到一個新的分支將代碼提交到新的分支上去呢&#xff1f; 1、如果你已經在遠程創建了一個分…

FindWindow用法

函數功能&#xff1a;該函數獲得一個頂層窗口的句柄&#xff0c;該窗口的類名和窗口名與給定的字符串相匹配。這個函數不查找子窗口。在查找時不區分大小寫。 函數型&#xff1a;HWND FindWindow&#xff08;LPCTSTR IpClassName&#xff0c;LPCTSTR IpWindowName&#xff0…

中國大城市政治地位綜合實力排名

中國大城市政治地位綜合實力排名&#xff01; 中國大城市政治地位綜合實力排名&#xff01;政治地位: 政治地位: 1&#xff08;直轄市 4 個&#xff09;&#xff1a;上海、北京、天津、重慶 2&#xff08;副省級城市 15 個&#xff09;&#xff1a;廣州、深圳、武漢、南京、沈陽…

sourcemap總結

sourcemap在線上壓縮文件調試中很重要&#xff0c;在此總結如下&#xff1a; 1. 開啟sourcemap (1). 瀏覽器要開啟source-map支持(2). 壓縮文件底部要有source-map的URL&#xff0c;壓縮要開啟source-map(3). .map文件要放在服務器&#xff0c;source-map URL指向的位置 2. sou…

navicat 導出的sql文件,再導入,運行SQL文件成功,數據庫中卻沒有表

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 問題描述&#xff1a;本來在數據庫上右鍵 &#xff0c;運行SQL文件 &#xff0c;就可以導入 sql ,建表成功&#xff0c;并且數據也該的…

mysql索引之二級索引學習總結

二級索引又稱輔助索引、非聚集索引(no-clustered index)。b&#xff0b;tree樹結構。然而二級索引的葉子節點不保存記錄中的所有列&#xff0c;其葉子節點保存的是<健值&#xff0c;(記錄)地址>。好似聚集索引中非葉子節點保存的信息&#xff0c;不同的是二級索引保存的是…

264,avs中Skip宏塊與Direct預測模式 ,對稱模式的區別

1. B_Skip類型宏塊 &#xff1a;無像素殘差&#xff0c;無運動矢量殘差&#xff08;MVD&#xff09;和參考幀。解碼時&#xff0c;通過Direct預測模式&#xff08;時間或空間&#xff09;計算出前、后向MV后&#xff0c;直接利用前、后向MV得到像素預測值。像 素重構值像…

【hdu 6444】Neko's loop

【鏈接】 我是鏈接,點我呀:) 【題意】 給你一個序列. 你可以選擇起點i。 然后每次往右跳k次。 得到下一個值a[ik];。 問你跳m次能得到的最大值ma是多少。 如果>s輸出0 否則輸出s-ma; 【題解】 最后肯定會形成gcd(n,k)個環的。 對于每個環(長度為cnt。 預處理出從1..2cnt的…

高性能MySQL之Count統計查詢

近一段時間&#xff0c;有同事問我 “MySQL執行count很慢&#xff0c;有沒有什么優化的空間”。當時在忙&#xff0c;就回復了一句“innodb里面count統計都是實時統計&#xff0c;慢一些是正常的”&#xff0c; 周末閑暇下來&#xff0c;想到以前有好多人都問過關于count的問題…

js轉換字符串為base64位

在window對象下有兩個api,可以對ASCII編碼進行編譯,得到base64位的字符串 btoa:編碼為base64atob:解碼為ASCII碼此種方法不能對中文進行操作,因為ASCII碼中沒有中文,如果編碼會得到亂碼 要編碼中文可以先用encodeURIComponent() 對字符串進行轉義,轉義后再btoa()成base64就可以…

java 文件下載,中文表名,中文內容

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 RequestMapping("userDownloadTemplet")private void userDownloadTemplet(HttpServletRequest request,HttpServletResponse …

cherry-pick的用法

簡述 git cherry-pick可以選擇某一個分支中的一個或幾個commit(s)來進行操作。例如&#xff0c;假設我們有個穩定版本的分支&#xff0c;叫v2.0&#xff0c;另外還有個開發版本的分支v3.0&#xff0c;我們不能直接把兩個分支合并&#xff0c;這樣會導致穩定版本混亂&#xff0c…

Docker 二進制安裝docker

https://blog.csdn.net/bruce_yds/article/details/80035714轉載于:https://www.cnblogs.com/Presley-lpc/p/9698724.html

264,avs重要的變量:

B幀&#xff1a; B8pdir[i] i為0,1,2,3&#xff1b;值的含義&#xff1a;0&#xff1a;前向 &#xff1b;1&#xff1a;后向&#xff1b;2&#xff1a;雙向&#xff1b;如果為intra_block,則為-1. B8mode[i] i為0,1,2,3 &#xff0c;值的含義&#xff1a;1:16x16 2:16x8 3…

insert into 語句的三種寫法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 insert into 語句的三種寫法 方式1、 INSERT INTO t1(field1,field2) VALUE(v001,v002); // 明確只插入一條Value 方式2、 IN…

Linux系統中跟TCP相關的內核參數

1. TCP保活機制 參考 《Nginx(三) 配置文件詳解 - 基礎模塊》3.18章節 net.ipv4.tcp_keepalive_intvl&#xff1a;設置兩次相鄰探活檢測的間隔時間。默認是75秒&#xff0c;單位是秒。net.ipv4.tcp_keepalive_probes&#xff1a;設置探活最多檢測次數。默認是9次&#xff0c;單…

ECMAScript3中數組方法

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>ECMAScript3中數組方法</title></head><body><script>//字符串和數組之間相轉換的方法 1.join() split() /*var str abcdefg…

implements Serializable

Serializable是一個對象序列化的接口&#xff0c;一個類只有實現了Serializable接口&#xff0c;它的對象才是可序列化的。因此如果要序列化某些類的對象&#xff0c;這些類就必須實現Serializable接口。而實際上&#xff0c;Serializable是一個空接口&#xff0c;沒有什么具體…

Codeforces 1045. A. Last chance(網絡流 + 線段樹優化建邊)

題意 給你 \(n\) 個武器&#xff0c;\(m\) 個敵人&#xff0c;問你最多消滅多少個敵人&#xff0c;并輸出方案。 總共有三種武器。 SQL 火箭 - 能消滅給你集合中的一個敵人 \(\sum |S| \le 100000\) &#xff1b;認知光束 - 可以消滅 \([l, r]\) 區間中的一個敵人&#xff1b;O…