51Nod 1366 贫富差距
来源:互联网 发布:tv软件市场 编辑:程序博客网 时间:2024/06/09 00:28
1366 贫富差距
题目来源: TopCoder
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
一个国家有N个公民,标记为0,1,2,…,N-1,每个公民有一个存款额。已知每个公民有一些朋友,同时国家有一条规定朋友间的存款额之差不能大于d。也就是说,a和b是朋友的话,a有x元的存款,b有y元,那么|x-y|<=d。给定d值与N个人的朋友关系,求这个国家最富有的人和最贫穷的人的存款相差最大的可能值是多少?即求贫富差距的最大值的下界。若这个值为无穷大,输出-1.
Input
多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
每组测试数据有相同的结构构成。
每组数据的第一行两个整数N,d,表示人数与朋友间存款差的最大值,其中2<=N<=50,0<=d<=1000.
接下来有一个N*N的数组A,若A[i][j]=’Y’表示i与j两个人是朋友,否则A[i][j]=’N’表示不是朋友。其中A[i][i]=’N’,且保证
A[i][j]=A[j][i].
Output
每组数据一行输出,即这个国家的贫富差距最大值的下界,如果这个值为无穷大输出-1.
Input示例
3
3 10
NYN
YNY
NYN
2 1
NN
NN
6 1000
NNYNNN
NNYNNN
YYNYNN
NNYNYY
NNNYNN
NNNYNN
Output示例
20
-1
3000
分析:Flyod 找两点之间的最大距离,乘以d,无限大的情况肯定是联通块的数目大于 1
//并查集判断+Flyod#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<algorithm>#define MAXN 55using namespace std;int fa[MAXN],n,d;char map[MAXN][MAXN];inline void read(int &x) { x = 0; register char c = getchar(); while(c > '9' || c < '0') c = getchar(); while(c >= '0' && c <= '9') { x = x *10 + c - '0'; c = getchar(); }}struct Node { int idex,step; }Now,Nos;bool exist[MAXN];int Find(int x) { if( x == fa[x] ) return x; else return fa[x] = Find(fa[x]);}int Bfs(int x) { queue<Node> q; memset(exist,0,sizeof exist ); exist[x] = true; Now.idex = x,Now.step = 0; q.push(Now); int u,step; while(!q.empty()) { Nos = q.front();q.pop(); u = Nos.idex,step = Nos.step; for(int i=1; i<=n; ++i) if(map[u][i] == 'Y' & !exist[i]){ exist[i] = true; Now.idex = i,Now.step = step + 1; q.push(Now); } } return step;}int main(int argc,char *argv[]) { int T; read(T); while( T-- ) { read(n),read(d); for(int i=1; i<=n; ++i) scanf("%s",map[i] + 1),fa[i] = i; for(int i=1; i<=n; ++i) for(int j=i+1; j<=n; ++j) if(map[i][j] == 'Y') fa[Find(i)] = Find(j); int s = 0; for(int i=1; i<=n; ++i) if(fa[i] == i) s++; if(s > 1) { printf("-1\n"); continue; } int p,Ans = 0; for(int i=1; i<=n; ++i) Ans = max(Ans,Bfs(i)); printf("%d\n",d * Ans); } return 0;}
阅读全文
0 0
- 51nod 1366 贫富差距
- 51nod-1366:贫富差距
- 51Nod 1366 贫富差距
- 51nod 1366 贫富差距
- 51Nod-1366 贫富差距
- 51nod 1366 贫富差距 弗洛伊德
- 51Nod-1366-贫富差距
- 51nod 1366 贫富差距(最短路)
- 51nod oj 1366 贫富差距【枚举+最长的短路】
- 51nod 1366 贫富差距【并查集+Floyd】
- 51nod 1366 贫富差距 (并查集+最短路径)
- 1366 贫富差距
- 贫富差距
- 浅谈贫富差距。
- 贫富差距 wealth gap
- 贫富差距源于理财意识
- 51Nod
- 51Nod
- JavaScript 高级程序设计
- 洛谷1044 栈
- 001 线性代数之行列式:定义、逆序数、余子式与代数余子式、n个易算行列式、范德蒙行列式
- 用小说的形式讲解Spring(4) —— 使用Spring Boot创建NoXml的Web应用
- bzoj1854: [Scoi2010]游戏(二分图匹配)
- 51Nod 1366 贫富差距
- learning R with swirl-subsetting vectors(子集向量)
- 在 Intellij IDEA中设置Maven 路径及配置文件的方法(使用阿里云Maven源)
- java控制台中文汉字乱码
- 用 Doc2Vec 得到文档/段落/句子的向量表达
- Python-字典-通讯录
- 黑科技世界–随身携带的小空调Aircon Watch
- NOIP模拟(10.22)T3 树
- CCPC 2017 哈尔滨赛区现场赛 比赛总结