先离散一下,然后并查集就好了。

(一开始作大死,没全离散,WA一片)

 #include<bits/stdc++.h>
#define INF 0x7fffffff
#define LL long long
#define N 1000005
using namespace std;
inline int ra()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
int fa[N],b[N],n,m,cnt,tot,sum;
bool flag;
struct node{
int x,y;
}ask[N],a[N];
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
int main()
{
int T=ra();
while (T--)
{
map<int ,int > mp; sum=;
n=ra(); cnt=; tot=; flag=;
for (int i=; i<=n; i++)
{
int x=ra(),y=ra(),z=ra();
if (z==)
{
b[++sum]=x; b[++sum]=y;
ask[++cnt].x=x,ask[cnt].y=y;
}
else {
a[++tot].x=x; a[tot].y=y;
b[++sum]=x; b[++sum]=y;
}
}
sort(b+,b+sum+);
int len=unique(b+,b+sum+)-b;
unique(b+,b+sum+);
for (int i=; i<len; i++)
mp[b[i]]=i;
for (int i=; i<=sum; i++) fa[i]=i;
for (int i=; i<=tot; i++)
{
int q=find(mp[a[i].x]),p=find(mp[a[i].y]);
if (q!=p)
fa[p]=q;
}
for (int i=; i<=cnt; i++)
{
int q=find(mp[ask[i].x]),p=find(mp[ask[i].y]);
if (p==q)
{
cout<<"NO"<<endl;
flag=;
break;
}
}
if (!flag) cout<<"YES"<<endl;
}
return ;
}

最新文章

  1. ks
  2. 创建一个点状注记(MarkerElement)
  3. queen8
  4. linux 内核邮件列表
  5. 随笔:近期仍在流行的QQ盗号网页简析
  6. thinkphp自动验证中的静态验证和动态验证和批量验证
  7. Nginx 服务器性能参数设置
  8. C语言中的const
  9. Xcode 7在支持ipad的设备中需要支持分屏!
  10. python学习笔记27(python中sys模块的使用)
  11. new[] class deconstructor
  12. /etc/group文件详解
  13. SqlServer发送邮件,定时作业
  14. SuperWebClient -一个基于CURL的.NET HTTP/HTTPS模拟神组件(2)
  15. 原生javascript选项卡
  16. 使用Update Strategy组件无法进行delete操作
  17. vimrc配置
  18. 【Python3练习题 002】企业发放的奖金根据利润提成
  19. tomcat 服务器故障排除
  20. Event Tracing For Windows

热门文章

  1. Day3-E-New Year Snowmen CodeForces140C
  2. 全程2分钟!教你如何免费下载Windows 10
  3. sqlserver查找断号,回收单据号
  4. P1063 计算谱半径
  5. CodeForces - 876E National Property(2-sat)
  6. PV 动态供给【转】
  7. django ajax发送post请求
  8. 春运到了,带你用python来抢票回家!
  9. 029、Java中的四则运算
  10. Hive Join优化经验