C - How Many Tables - HDU-1213
2015-07-22 15:38
148 查看
某个人举办生日宴会邀请了很多人来参加,不过呢,这些人有个毛病他们只会与熟悉人的坐在一起,当然他们也信奉朋友的朋友也是朋友这一法则,所以问最少需要多少张桌子......
好吧我承认这才是裸并查集.......没什么好说的,直接秒了吧
/////////////////////////////////////////////////////////////////////
#include<stdio.h>
const int maxn = 1005;
int f[maxn];
int Find(int x)
{
if(f[x] != x)
f[x] = Find(f[x]);
return f[x];
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int i, N, M, u, v;
scanf("%d%d", &N, &M);
for(i=1; i<=N; i++)
f[i] = i;
while(M--)
{
scanf("%d%d", &u, &v);
u = Find(u);
v = Find(v);
f[u] = v;
}
int ans = 0;
for(i=1; i<=N; i++)
{
if(f[i] == i)
ans++;
}
printf("%d\n", ans);
}
return 0;
}
好吧我承认这才是裸并查集.......没什么好说的,直接秒了吧
/////////////////////////////////////////////////////////////////////
#include<stdio.h>
const int maxn = 1005;
int f[maxn];
int Find(int x)
{
if(f[x] != x)
f[x] = Find(f[x]);
return f[x];
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
int i, N, M, u, v;
scanf("%d%d", &N, &M);
for(i=1; i<=N; i++)
f[i] = i;
while(M--)
{
scanf("%d%d", &u, &v);
u = Find(u);
v = Find(v);
f[u] = v;
}
int ans = 0;
for(i=1; i<=N; i++)
{
if(f[i] == i)
ans++;
}
printf("%d\n", ans);
}
return 0;
}
相关文章推荐
- TI BLE开发(二)修改蓝牙连接参数
- css 圆角写法
- 关于正则表达式
- tomcat中文参数乱码
- ACM计算几何推荐
- 浅谈微信卡券功能开发(1)
- android 使用NDK
- flume、kafka、storm常用命令
- IndexedDB:浏览器里内置的数据库(转)
- [好文要转]【关于block使用的5点注意事项】
- select/**/*/**/from/**/RegSite
- Dynamic Programming - Part2
- KAFKA学习总结
- 深入理解kafka设计原理
- 什么是静态地址重定位,它需要什么支持?什么是动态地址重定位,他需要什么支持?静态地址重定位与动态地址重定位有什么区别?
- javascript学习之JSON
- SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
- Java中Timer的用法
- 文章标题
- uva 10806 Dijkstra, Dijkstra. (最小费最大流)