HDU 5486 Difference of Clustering 图论
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5486
题意:
给你每个元素一开始所属的集合和最后所属的集合,问有多少次集合的分离操作,并操作和不变操作。
分离:[m1,m2,m3]->[m1],[m2],[m3]
合并:分离的逆操作
不变:[m1,m2,m3]->[m1,m2,m3]
题解;
以集合为单位建图,(一个元素从集合s1到s2则建一条边连接集合s1,s2,注意要删除重边)
然后对于每个点,与它相邻的点如果入度都为1,则为分离操作,
把图转置,再跑一遍分离就是合并。
如果一个集合只有一条连向自己的边,那么说明它是1:1操作。
代码:
#include<iostream>
#include<cstdio>
#include<map>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std; const int maxn = 1e6 + 10; int n,_max;
map<pair<int, int>, int> mp;
vector<int> G[maxn], G2[maxn];
int in[maxn], in2[maxn]; void init() {
_max = -1;
mp.clear();
for (int i = 0; i <maxn; i++) G[i].clear(),G2[i].clear();
memset(in, 0, sizeof(in));
memset(in2, 0, sizeof(in2));
} int main() {
int tc,kase=0;
scanf("%d", &tc);
while (tc--) {
scanf("%d", &n);
init();
for (int i = 0; i < n; i++) {
int u, v;
_max = max(_max, u);
_max = max(_max, v);
scanf("%d%d", &u, &v);
if (!mp[make_pair(u, v)]) {
mp[make_pair(u, v)]++;
G[u].push_back(v);
in[v]++;
G2[v].push_back(u);
in2[u]++;
}
}
int ans1=0, ans2=0,ans3=0;
for (int i = 0; i <= _max; i++) {
int su = 1;
for (int j = 0; j < G[i].size(); j++) {
int v = G[i][j];
if (in[v] > 1) { su = 0; break; }
}
if (su) {
if (G[i].size() == 1) ans3++;
else if(G[i].size()>1) ans2++;
}
}
for (int i = 0; i <= _max; i++) {
int su = 1;
for (int j = 0; j < G2[i].size(); j++) {
int v = G2[i][j];
if (in2[v] > 1) { su = 0; break; }
}
if (su) {
if (G2[i].size() == 1);
else if(G2[i].size()>1) ans1++;
}
}
printf("Case #%d: %d %d %d\n", ++kase, ans2,ans1, ans3);
}
return 0;
}
HDU 5486 Difference of Clustering 图论的更多相关文章
- HDU 5486 Difference of Clustering 暴力模拟
Difference of Clustering HDU - 5486 题意:有n个实体,新旧两种聚类算法,每种算法有很多聚类,在同一算法里,一个实体只属于一个聚类,然后有以下三种模式. 第一种分散, ...
- HDU 5489 Difference of Clustering 图论
Difference of Clustering Problem Description Given two clustering algorithms, the old and the new, y ...
- HDU 5487 Difference of Languages(BFS)
HDU 5487 Difference of Languages 这题从昨天下午2点开始做,到现在才AC了.感觉就是好多题都能想出来,就是写完后debug很长时间,才能AC,是不熟练的原因吗?但愿孰能 ...
- hdu 4715 Difference Between Primes
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4715 Difference Between Primes Description All you kn ...
- HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))
Difference Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 5487 Difference of Languages
Difference of Languages Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. ...
- hdu 4715 Difference Between Primes(素数筛选+树状数组哈希剪枝)
http://acm.hdu.edu.cn/showproblem.php?pid=4715 [code]: #include <iostream> #include <cstdio ...
- HDU 4715 Difference Between Primes (打表)
Difference Between Primes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- hdu 4715 Difference Between Primes (打表 枚举)
Difference Between Primes Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
随机推荐
- 第十一篇、微信小程序-input组件
主要属性: 效果图: ml: <!--style的优先级比class高会覆盖和class相同属性--> <!--头像--> <view style="displ ...
- 【学习笔记】【C语言】注释
1. 什么是注释 1) 注释是在所有计算机语言中都非常重要的一个概念,从字面上看,就是注解.解释的意思 2) 注释可以用来解释某一段程序或者某一行代码是什么意思,方便程序员之间的交流.假如我写完一行代 ...
- 【Unity3D】刚体与碰撞体以及is Trigger属性的意义
[Unity3D]刚体与碰撞体以及is Trigger属性的意义 刚体:个人理解就是具有物理属性(如:质量),接受物理作用(如:重力)的组件. 碰撞体:个人理解就是计算碰撞后的物理量(如:弹力). 刚 ...
- hdu 2955 Robberies 0-1背包/概率初始化
/*Robberies Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- 杭电ACM2098--分拆素数和
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2098 这是源码.其实我本不想拿出源码,毕竟源码很容易被复制. 我这里刚开始出错的地方有 0_0_12811 ...
- Java RMI 远程方法调用
Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...
- 关于java的转义字符
关于java的转义字符 我们都知道 String s="ad,dfjdlfs,df,s,dfl"; 执行 String re[]=s.split(&qu ...
- 【Qt】Qt环境搭建(Qt Creator)【转】
简述 上一节中介绍了如何进行Qt和Visual Studio的下载安装,随后演示了如何将Qt集成到Visual Studio中,并完成了我们第一个Qt小程序-Hello World.下面主要讲解如何利 ...
- Ubuntu 12.04 修改默认启动为字符界面
sudo vim /etc/default/grub 修改GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 为:GRUB_CMDLINE_LINU ...
- VirtrualBox 搭建本地lamp环境
1.VirtrualBox安装Centos6.8 minimal VirtrualBox新建个虚拟机配置好内存以及硬盘大小,安装即可: 网络方式是 NAT(默认)和桥接方式来实现,最好在安装前设置好, ...