poj 1975 Median Weight Bead
2015-07-02 22:28
423 查看
需要floyd实现闭环计算,然后统计每个元素大于其他元素的次数,如次数大于(N / 2) + 1, 那么说明该元素一定小于中间值。
#include<iostream> #include<string.h> #include<math.h> #include<fstream> #include<algorithm> #include<stdio.h> #include<queue> #include<vector> #define MAXSIZE 100 using namespace std; const int INF = 1<<29; int t = 0, N = 0, M = 0; int dp[110][110]; int ans = 0; void floyd_dp() { for (int k = 0; k < N; k++) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { dp[i][j] = min (dp[i][j], dp[i][k] + dp[k][j]); } } } } int main() { //freopen("data_1975.txt","r",stdin); scanf("%d", &t); while(t--) { scanf("%d%d", &N, &M); ans = 0; memset(dp, 0, sizeof(dp)); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { dp[i][j] = INF; } } for (int i = 0; i < M; i++) { int a = 0, b = 0; scanf("%d%d", &a, &b); a--; b--; dp[a][b] = 1; } floyd_dp(); int judge = (N / 2) + 1; int a = 0, b = 0; for (int i = 0; i < N; i++) { a = 0; b = 0; for (int j = 0; j < N; j++) { if (dp[i][j] < INF) { a++; }else if (dp[j][i] < INF) { b++; } } if (a >= judge || b >= judge) { ans++; } } printf("%d\n", ans); } return 0; }
相关文章推荐
- C++ cout利用控制符dec、hex和oct,分别输出十进制、十六进制和八进制显示整数
- Python 2.7.9 Demo - isinstance
- android之ConnectivityManager简介,网络连接状态
- Python 2.7.9 Demo - 020.函数的定义、返回
- 查看图片的Domo
- Isomorphic Strings leetcode 205
- Linux基础-运维常用命令
- 用线程和借口分别实现的Java秒表
- 字符串统计
- android应用程序跳转到系统的各个设置页面
- 【转】NPAPI 插件无法在 Chrome 42 版及更高版本上正常运行
- AI-随机迷宫&迷宫求解
- [LeetCode][JavaScript]Kth Smallest Element in a BST
- Android 查看图片
- JQuery实战---用户名校验
- for do_while() while()
- leetcode刷题 总结 记录, 备忘 62
- 如何让DIV水平和垂直居中
- SWIFT推送之本地推送(UILocalNotification)
- 【JavaScript】Number和String基本包装类型操作方法