codevs 2597 团伙x
1920年的芝加哥,出现了一群强盗。如果两个强盗遇上了,那么他们要么是朋友,要么是敌人。而且有一点是肯定的,就是:
我朋友的朋友是我的朋友;
我敌人的敌人也是我的朋友。
两个强盗是同一团伙的条件是当且仅当他们是朋友。现在给你一些关于强盗们的信息,问你最多有多少个强盗团伙。
输入文件gangs.in的第一行是一个整数N(2<=N<=1000),表示强盗的个数(从1编号到N)。 第二行M(1<=M<=5000),表示关于强盗的信息条数。 以下M行,每行可能是F p q或是E p q(1<=p q<=N),F表示p和q是朋友,E表示p和q是敌人。输入数据保证不会产生信息的矛盾。
输出文件gangs.out只有一行,表示最大可能的团伙数。
6
4
E 1 4
F 3 5
F 4 6
E 1 2
样例输出
Sample Output
3
数据范围及提示
Data Size & Hint
2<=N<=1000
1<=M<=5000
1<=p q<=N
分类标签
Tags
点此展开
超时代码(递归时间太长了吧大概是因为):
(温馨贴士:递归能不用则不用)
#include<iostream>
#include<cstdio>
#define Maxn 1005 using namespace std;//(F为朋友E为敌人) int f1,f2,n,m,tot=;
int F[Maxn],e[Maxn];
bool vis[Maxn]; int find(int x)
{
return x == F[x] ? x : F[x]=find(F[x]);
} void unionn(int x,int y)
{
f1=find(x);
f2=find(y);
if(f1!=f2)
{
F[f1]=f2;
if(e[f2]!=)//合并时,若r2有敌人
{
unionn(e[f2],f1);
if(e[f1]!=)//若r1也有敌人
{
unionn(e[f1],e[f2]);//则它们的敌人是朋友
}
else e[f1]=e[f2];//否则,r2的敌人同时也是r1的敌人,即他们为朋友
}
}
} int main()
{
char p;
int x,y;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)//初始化
{
F[i]=i;
e[i]=;
}
for(int i=;i<=m;i++)
{
cin>>p>>x>>y;
if(p=='F') //if x is y's friend
{
unionn(x,y); //并在一起
}
if(p=='E') //if x is y's 敌人(英语不会哈)
{
x=find(x);
if(e[x]==)//将y作为x团伙的敌人
{
e[x]=y;
}else unionn(e[x],y);
if(e[y]==)//与之类似
{
e[y]=x;
}else unionn(e[y],x);
}
}
for(int i=;i<=n;i++)
{
if(find(i)==i) tot++;//进行统计
}
printf("%d\n",tot);
return ;
}
AC代码:
其实就是把递归的地方改掉了而已,要好好的进行理解!!!
#include<iostream>
#include<cstdio>
#define Maxn 2333 using namespace std;//(F为朋友E为敌人) int f1,f2,n,m,tot=;
int F[Maxn],e[Maxn]; int find(int x)
{
return x == F[x] ? x : F[x]=find(F[x]);
} int main()
{
char p;
int x,y;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)//初始化
{
F[i]=i;
}
for(int i=;i<=m;i++)
{
cin>>p>>x>>y;
if(p=='F') //if x is y's friend
{
f1=find(x);f2=find(y);
if(f1!=f2) F[f1]=f2; //并在一起
}
if(p=='E') //if x is y's 敌人(英语不会哈)
{
e[x] ? F[find(e[x])] = find(y) : e[x]=y;//x有敌人么?有就将y的集团与x敌人的集团并起来,没有就将y作为x的敌人
e[y] ? F[find(e[y])] = find(x) : e[y]=x;//同上
}
}
for(int i=;i<=n;i++)
{
if(find(i)==i) tot++;//进行统计
}
printf("%d\n",tot);
return ;
}
codevs 2597 团伙x的更多相关文章
- Codevs 2597 团伙(并查集)
2597 团伙 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么 ...
- codevs 2597 团伙
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么 ...
- 团伙(codevs 2597)
题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友 ...
- code vs 2597 团伙
题目描述 Description 1920年的芝加哥,出现了一群强盗.如果两个强盗遇上了,那么他们要么是朋友,要么是敌人.而且有一点是肯定的,就是: 我朋友的朋友是我的朋友: 我敌人的敌人也是我的朋友 ...
- 食物链 2001年NOI全国竞赛
时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B ...
- T2597 团伙 codevs
http://codevs.cn/problem/2597/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 1920年的芝加 ...
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
随机推荐
- 设计模式:备忘录模式(Memento)
个人比较喜欢玩单机游戏,什么仙剑.古剑.鬼泣.使命召唤.三国无双等等一系列的游戏我都玩过(现在期待凡人修仙传),对于这些游戏除了剧情好.场面大.爽快之外,还可以随时存档,等到下次想玩了又可以从刚开始的 ...
- nigx下配置tp5.1路由
打开宝塔面板,找到你要配置路由的网站并找到配置文件(如图1) (图1) 2.在配置文件里添加一下代码 set $root = /www/wwwroot/www.blogs.test/public; # ...
- 华为wlan配置流程及相关重要步骤AC配置
本次介绍是AC+fitAP组网方式的重要步骤. 一.基础配置 1.规划好ac+ap的组网方式和转发方式.(本次以三层旁挂直接转发),规划管理vlan,业务vlan,与AC连接的vlan,以及他们接口的 ...
- 设置队列中文件上的“X”号的点击事件+uploadLimit动态加1
目的:1.设置文件队列中“x”号的点击事件 2.每次删除服务器文件后,把uploadLimit + 1: 'onUploadSuccess': function (file, data, respon ...
- div+css布局教程(1)
margin:Margin属性用于设置两个元素之间的距离. 后面如果只有两个参数的话,第一个表示top和bottom,第二个表示left和right因为0 auto,表示上下边界为0,左右则根据宽度自 ...
- 如何给Word参考文献加方括号
脚注是在页面下端添加的注释,如添加在一篇论文首页下端的作者情况简介:尾注是在文档尾部(或节的尾部)添加的注释,如添加在一篇论文末尾的参考文献目录. 若用手工添加脚注和尾注,则既麻烦又易出错.当用Wor ...
- webpack的基本使用
安装webpack npm i webpack -g npm i webpack-cli -g 1.基础用法(无需配置webpack.config.js文件) 1.2 新建需要打包的测试文件input ...
- js 获取当前月份 第一天和最后一天
js 获取当前月份 第一天和最后一天 var now = new Date(); //当前日期 var nowMonth = now.getMonth(); //当前月 var nowYear = n ...
- git解决pre-commit hook failed的问题
最近在提交前端代码的时候发现提交不上去,一直报错 一.错误详情 二.错误分析 1.刚开始用vsCode提交,后更改为命令提交,依旧报错: 2.经过查询资料,发现是pre-commit钩子的原因. ...
- 使用sublimeserver启动本地服务器进行调试
最近在做前后端分离的项目,访问后台接口的时候会产生跨域问题,修改了相关配置解决了跨域问题,但是配置中只对开发环境进行了设置,没有设置生产环境,为了验证生产环境确实无法访问后台接口遂npm run bu ...