POJ1733
2024-08-31 11:20:21
题目链接:https://vjudge.net/problem/POJ-1733
解题思路:并查集+离散化
AC代码:
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <map>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn=;
struct query{
int l,r;
int oe;
}q[maxn];
map<int,int> lists;
int v[maxn],fa[maxn];
int finds(int t){
if(fa[t]==-)
return t;
int tmp=finds(fa[t]);
v[t]^=v[fa[t]];
return fa[t]=tmp;
}
int main(){
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int vals[maxn<<];
char ooe[];
int ques,len;
memset(fa,-,sizeof(fa));
memset(v,,sizeof(v));
scanf("%d",&len);
scanf("%d",&ques);
int j=;
for(int i=;i<=ques;i++){
scanf("%d%d%s",&q[i].l,&q[i].r,ooe);
q[i].l-=;
if(ooe[]=='e') q[i].oe=;
else q[i].oe=;
vals[j]=q[i].l; j++;
vals[j]=q[i].r; j++;
}
sort(vals+,vals+j);
int m=unique(vals+,vals+j)-vals-;
for(int i=;i<=m;i++){
lists[vals[i]]=i;
}
int ending=;
for(int i=;i<=ques;i++){
int t1=finds(lists[q[i].l]),t2=finds(lists[q[i].r]);
int vl=v[lists[q[i].l]],vr=v[lists[q[i].r]];
if(t1==t2){
if(vr^vl!=q[i].oe){
printf("%d\n",i-);
ending=;
break;
}
}
else{
fa[t2]=t1;
v[t2]=q[i].oe^vl^vr;
}
}
if(!ending) printf("%d\n",ques);
return ;
}
额,先这样吧,晚上或者明天再来详谈。
最新文章
- sublimetext3中保存代码片段
- ACCEPTANCE CRITERIA FOR USER STORIES
- mongodb(回滚)
- AI(Adobe Illustrator)简单入门——米老鼠
- 求教Sublime Text2 SublimeLinter插件安装问题
- 【技巧性(+递归运用)】UVa 1596 - Bug Hunt
- 使用NSURLSession实现断点续传
- Hadoop的辉煌还能延续多久?
- SonarQube4.4+Jenkins进行代码检查实例之二
- 一道C语言面试题:写一个宏,将16位的整数转为Big Endian
- DxPackNet 1.打开摄像头
- installshield安装包制作
- redis的编译安装
- Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
- Java时间日期格式转换 转自:http://www.cnblogs.com/edwardlauxh/archive/2010/03/21/1918615.html
- mysqldump备份(Windows)
- Rsync常见错误和问题
- 洛谷 P4345 [SHOI2015]超能粒子炮&#183;改 解题报告
- 模仿QQ 之弹出菜单
- git-常用命令一览表