码迷,mamicode.com
首页 > 其他好文 > 详细

程序自动分析

时间:2020-03-08 13:56:46      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:个数   std   bit   space   font   return   bool   col   int   

# 题意

t组数据判断,n个数据,每组一个x,y,e,e=1表示x=y,e=0表示x≠y,问是否存在矛盾

0<=n<=1e6

0<=x,y<=1e9

# 题解

因为x,y范围很大所以先将点离散化到小的范围内,然后先将x=y的所有合并到一个基本,再判断不相等的情况如果在一个集合则存在矛盾,否则没有矛盾

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e6+10;
 4 int fa[N];
 5 int n;
 6 int cnt;
 7 struct query{
 8     int x,y,e;
 9 }q[N];
10 unordered_map<int,int>h;
11 int find(int x){
12     if(fa[x]!=x) fa[x]=find(fa[x]);
13     return fa[x];
14 }
15 void merge(int a,int b){
16     fa[find(a)]=find(b);
17 }
18 int get(int x){
19     if(h[x] == 0) h[x] = ++cnt;
20     return h[x];
21 }
22 void solve(){
23     cin>>n;
24     cnt=0;
25     h.clear();
26     for(int i=0;i<n;i++){
27         int x,y,e;
28         cin>>x>>y>>e;
29         q[i]={get(x),get(y),e};
30     }
31     for(int i=1;i<=cnt;i++)
32         fa[i]=i;
33 
34     for(int i=0;i<n;i++){
35         if(q[i].e==1){
36             merge(q[i].x,q[i].y);
37         }
38     }
39     bool flag=0;
40     for(int i=0;i<n;i++){
41         if(q[i].e==0) {
42             int fax = find(q[i].x), fay = find(q[i].y);
43             if (fax == fay) {
44                 flag = 1;
45                 break;
46             }
47         }
48     }
49     if(flag)
50         cout<<"NO"<<endl;
51     else
52         cout<<"YES"<<endl;
53 }
54 int main(){
55     int t;
56     cin>>t;
57     while(t--){
58         solve();
59     }
60 }

 

程序自动分析

标签:个数   std   bit   space   font   return   bool   col   int   

原文地址:https://www.cnblogs.com/hhyx/p/12442100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!