WUST OJ 1481: divide into groups(二分)
来源:互联网 发布:杀破狼js为什么下架了 编辑:程序博客网 时间:2024/06/06 07:44
1481: divide into groups
Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitted: 74 Accepted: 9
[Submit][Status][Web Board]
Description
一条路上站着许多人,没有两个人站在同一个坐标下。要将相互是朋友的人分到且必须分到同一组,不是朋友的两个人不允许分到同一组。
两个人至少满足以下一条规则就是朋友:
1.A,B一开始就是朋友
2.如果A和B是朋友,A和C是朋友,那么B和C也是朋友
3.如果A和B的距离不超过L,那么A和B自动成为朋友
现在wh想求出最小的L,使分组的组数为m。请帮助他求出最小的L。^_^
Input
第一行有三个数 n,m,d,n个游客,分为m组,一开始有d对朋友。0<=n<=10^5,1<=m<=n,0<=d<=n
接下来一行有n个数,表示每个游客的坐标pi (0<=pi<=10^6)
接下来有d行,每行两个数a,b,表示坐标为a的人和坐标为b的人是朋友。
所有的输入都是整数 ,多组测试
Output
如果存在最小的L,输出 L
否则输出 i love wh
Sample Input
3 2 1
0 5 2
0 2
3 2
0
1 2 3
Sample Output
0
i love wh
Source
2015年暑期集训队选拔赛1
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int MAX=1e6+10;int p[MAX],a[MAX],d[MAX];int n,m;int pf(int x){return p[x]==x?x:p[x]=pf(p[x]);}int df(int x){return d[x]==x?x:d[x]=df(d[x]);}int check(int mid){ int ans=0; for(int i=0;i<n;i++)d[a[i]]=p[a[i]]; for(int i=0;i+1<n;i++) { if(abs(a[i+1]-a[i])<=mid)d[df(a[i+1])]=df(a[i]); } for(int i=0;i<n;i++)if(d[a[i]]==a[i])ans++; if(ans==m)return 0; if(ans>m)return -1; if(ans<m)return 1;}int main(){ int T,maxx,minx; while(scanf("%d%d%d",&n,&m,&T)!=EOF) { maxx=1e6,minx=0; memset(p,-1,sizeof p); memset(d,-1,sizeof d); for(int i=0;i<n;i++) { scanf("%d",&a[i]); p[a[i]]=a[i]; maxx=max(maxx,a[i]); minx=min(minx,a[i]); } sort(a,a+n); while(T--) { int x,y; scanf("%d%d",&x,&y); p[pf(x)]=pf(y); } int ans=0; for(int i=0;i<n;i++)if(p[a[i]]==a[i])ans++; if(ans==m){printf("0\n");continue;} if(ans<m){puts("i love wh");continue;} int l=1,r=maxx-minx,mid; ans=-1; while(r>=l) { mid=(l+r)/2; int result=check(mid); if(result==-1)l=mid+1; else { if(result==0)ans=mid; r=mid-1; } } if(ans==-1)puts("i love wh"); else printf("%d\n",ans); } return 0;}
阅读全文
1 0
- WUST OJ 1481: divide into groups(二分)
- HDU - 4751 Divide Groups(二分图)
- hdu 4751 Divide Groups(判完美二分图)
- HDU 4751 Divide Groups(二分图的判断)
- HDU 4751 Divide Groups(判断二分图)
- hdu4751 Divide Groups (二分图判定)
- HDU 4751 Divide Groups (二分图)
- hdu 4751 Divide Groups (二分图判断)
- HDU 4751 Divide Groups 二分图判断
- HDOJ-----4751---Divide Groups二分判断
- HDU 4751 Divide Groups(二分图判断)
- HDU 4751 Divide Groups【二分图染色】
- Divide Groups
- hdu 4751 Divide Groups (2-SAT or 补图+二分图判定)
- HDOJ题目4751 Divide Groups(染色法判二分图)
- wust oj
- HDU 4751 Divide Groups(判断是否为二分图)
- HDU 4751 — Divide Groups 交叉染色判二分图
- datastage文件入库乱码问题
- spring框架总结(04)----介绍的是Spring中的JDBC模板
- windows命令行的整理
- Vue.js高仿饿了么外卖APP(二)具体样式遇到的问题
- 图像噪声简介
- WUST OJ 1481: divide into groups(二分)
- mysql时间转换
- Ubuntu 上ImportError:No module named _ssl如何解决
- ASCLL字符整理
- 【HDU 5983 Pocket Cube】& 模拟
- 使用Mybatis时出错:A query was run and no Result Maps were found for the Mapped Statement
- 《珠珠图案》教程八:文字创作要领五
- 【Java学习3.5.3】表达式类型的自动提升
- 在Linux操作系统中搭建Python编程环境