hdu 1856
来源:互联网 发布:网络电影心机主播 编辑:程序博客网 时间:2024/05/17 03:01
题目
并查集。
找到最大出现的那个点。
对于每一个线段使得其权值加1
最后统计根节点的权值最大的就是答案
当n=0是,答案是1.特殊数据特判,否则wa
另外并查集的查找操作,若按其他方式写的话,即超时。
最后各种bug的加速情况下46msAC
代码如下:
#include<iostream>using namespace std;#include<cstdio>const int maxn=10000010;const int N=100010;int pre[maxn],val[maxn];int a[N],b[N];inline int input() { char c; int ret=0; c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') ret=ret*10+c-'0',c=getchar(); return ret; } inline int find(int x){ if(pre[x]!=x) pre[x]=find(pre[x]); return pre[x];}inline void Union(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy){ pre[fy]=fx; val[fx]+=val[fy]; }}inline void init(int n){ for(int i=1;i<=n;i++) { pre[i]=i; val[i]=1; }}int main(){ int n,ans,mx; while(~scanf("%d",&n)){ if(n==0) printf("1\n"); else{ mx=0;ans=1; for(int i=1;i<=n;i++){ a[i]=input();b[i]=input(); mx=max(a[i],mx); mx=max(b[i],mx); } init(mx); for(int i=1;i<=n;i++){ Union(a[i],b[i]); } for(int i=1;i<=mx;i++){ if(pre[i]==i) ans=max(ans,val[i]); } cout<<ans<<endl; } } return 0;}
- HDU 1856
- HDU 1856
- HDU 1856
- hdu 1856
- hdu 1856
- HDU 1856
- hdu 1856
- hdu 1856
- HDU 1856
- hdu 1856
- hdu 1856
- hdu 1856
- hdu-1856
- hdu 1856
- hdu 1856
- hdu 1856
- hdu--1856
- HDU 1856
- 感悟--黄小琥的二十年的坚持
- hdu 1241 Oil Deposits (dfs)
- 单例模式
- maven-war-plugin
- SOJ 4299: component
- hdu 1856
- 收集的一些cocos2d-x资料-博客,源码,网站,论坛等等
- 机器学习理论与实战(九)回归树和模型树
- IoC/DIP其实是一种管理思想[转载]
- 根据两点经纬度计算距离
- XML 特殊字符处理
- android:layout_gravity 和 android:gravity 的区别
- 一次谷歌面试趣事
- maven-surefire-plugin