xtu 1370 ball
Ball
题目描述
你有奇数个小球,依次被标号为1∼n和一架天平。已知所有的小球的质量都不一样,你用天平称了m次,根据这m次的结果,你是否能找到质量排序居中的那个球?
输入
第一行是一个整数T(1≤T≤100),表示样例的个数。 每个样例的第一行是两个整数n(3≤n≤99),m(n−1≤m≤n(n−1)2)。 以后的m行,每行两个整数a,b(1≤a≠b≤n),表示a比b重。 所有输入保证无矛盾,且同一组球不会被重复称重。
输出
每行输出一个样例的结果,即质量居中球的标号,如果找不到输出0;
样例输入
4
3 2
1 2
2 3
3 2
1 2
1 3
7 6
1 3
2 3
3 4
4 5
5 6
5 7
5 6
1 2
1 3
1 4
1 5
2 3
2 4
样例输出
2
0
4
0
法1,floyd求可达矩阵O(n^3)
- 每个球是一个顶点,如果两个球称过,就连一条有向边。
- 然后跑floyd,求可达矩阵。
- 如果某个顶点的入度和出度相同,都是(n-1)/2,那么这个球即所求。
#include<bits/stdc++.h>
using namespace std;
#define Debug(x) cout<<#x<<':'<<x<<endl
#define INF 0x7fffffff
typedef long long ll;
typedef pair<ll,ll> P;
const ll maxn=1e2+11;
ll g[maxn][maxn],dc[maxn],dr[maxn];
ll n,m;
void init(){memset(g,0,sizeof(g));memset(dc,0,sizeof(dc));memset(dr,0,sizeof(dr));
}
void floyd(){for(ll k=1;k<=n;k++){for(ll i=1;i<=n;i++){for(ll j=1;j<=n;j++){if(i==j) continue;if(g[i][k] && g[k][j]) g[i][j]=1;}}}
}
void solve(){floyd();for(ll i=1;i<=n;i++){for(ll j=1;j<=n;j++){if(i==j) continue;if(g[i][j]) dc[i]++,dr[j]++;}}ll ans=0;for(ll i=1;i<=n;i++) if(dc[i]==dr[i] && dc[i]==(n-1)/2) {ans=i;break;}cout<<ans<<endl;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);ll ca;cin>>ca;while(ca--){init();cin>>n>>m;for(ll i=1;i<=m;i++){ll u,v;cin>>u>>v;g[u][v]=1;}solve();} return 0;
}
法2,拓扑排序O(n*m)
这层级关系,不妥妥的拓扑排序嘛
假设a点为所求点,那么如果从a点可达n/2个点,反向建边后,从a点也可达n/2个点,那么这个点则为所求点。
#include<bits/stdc++.h>
using namespace std;
#define Debug(x) cout<<#x<<':'<<x<<endl
#define INF 0x7fffffff
typedef long long ll;
typedef pair<ll,ll> P;
const ll maxn=1e2+11;
const ll maxm=1e4+11;
struct Edge{ll to,nx;
}e[maxm];
ll head[maxn],dr[maxn],vis[maxn],num[maxn];
ll tmp,n,m;
set<ll> s;
vector<P> edge;
void init(){s.clear();edge.clear();memset(num,0,sizeof(num));memset(head,0,sizeof(head));memset(dr,0,sizeof(dr));tmp=1;
}
void add(ll u,ll v){e[tmp]={v,head[u]};head[u]=tmp++;}
void tuopu(){for(ll i=1;i<=n;i++){memset(vis,0,sizeof(vis));queue<ll> q;ll cnt=0;q.push(i);vis[i]=1;while(!q.empty()){ll u=q.front();q.pop();cnt++;for(ll i=head[u];i;i=e[i].nx){ll v=e[i].to;if(vis[v]) continue;vis[v]=1;q.push(v);}}if(cnt==n/2+1){s.insert(i);num[i]++;}}
}
void solve(){vector<ll> ans;tuopu();memset(head,0,sizeof(head));memset(dr,0,sizeof(dr));tmp=1;for(auto i=edge.begin();i!=edge.end();i++){ll u=(*i).second,v=(*i).first;add(u,v);dr[v]++;}tuopu();for(auto i=s.begin();i!=s.end();i++){if(num[*i]==2) ans.push_back(*i);}if(ans.size()==1) cout<<ans[0]<<endl;else cout<<0<<endl;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);ll ca;cin>>ca;while(ca--){init();cin>>n>>m;for(ll i=1;i<=m;i++){ll u,v;cin>>u>>v;add(u,v);dr[v]++;edge.push_back({u,v});}solve();}return 0;
}
xtu 1370 ball相关推荐
- CUDA Samples: green ball
以下CUDA sample是分别用C++和CUDA实现的生成的绿色的球图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第五章,各个文件内容 ...
- Aizu - 0033 Ball
这题书上写让用DFS--可是这一比较就出来啊-- Ball Aizu - 0033 図のように二股に分かれている容器があります.1 から 10 までの番号が付けられた10 個の玉を容器の開口部 A か ...
- AOJ0033 Ball【贪心+序列处理】
図のように二股に分かれている容器があります.1 から 10 までの番号が付けられた10 個の玉を容器の開口部 A から落とし.左の筒 B か右の筒 C に玉を入れます.板 D は支点 E を中心に左右 ...
- 【中国剩余定理】POJ 1006 HDU 1370 Biorhythms
题目链接: http://poj.org/problem?id=1006 http://acm.hdu.edu.cn/showproblem.php?pid=1370 题目大意: (X+d)%23=a ...
- hdu-4811 Ball
题目链接: Ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- hdu 1556 Color the ball
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Color the ball
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- 零样本性能超越GPT-3!谷歌提出1370亿参数自回归语言模型
©作者 | 机器之心编辑部 来源 | 机器之心 在 NLP 领域,pretrain-finetune 和 prompt-tuning 技术能够提升 GPT-3 等大模型在各类任务上的性能,但这类大模型 ...
- Hihocoder 1370 快乐数字
点击打开链接 快来数字 判断一个正整数是否是快乐数字? 如果一个数字能够通过有限次快乐变换成为1,则是快乐数字. 快乐变换是对一个数字的每一位的平方数求和. 例如: 对于68 68 => 62+ ...
- LightOJ 1370 - Bi-shoe and Phi-shoe
题目链接:http://lightoj.com/volume_showproblem.php?problem=1370 题意:给你n个数,每个数要找一个欧拉函数值大于等于这个数,并求和. 题解:就是素 ...
最新文章
- 老赵的自然数分解——少侠之对象解
- poj 2449 A*求k短路
- Okhttp3中设置超时的方法
- 电脑上怎么配置mysql数据库服务器_Mysql数据库服务器安装与配置详解教程
- ArcGIS实验教程——实验二十三:专题地图制作完整实验步骤
- 【Android】Uri和Url和URN
- Maven错误 diamond operator is not supported in -source 1.5 (use -source 7 or higher to enable diamond
- 构建微服务体系结构的最佳实践
- 三菱PLC软件有LINUX版本吗,三菱PLC编程软件(GX Developer)
- 利用TextRank算法制作一个可以提取聊天关键词的QQ群机器人
- 崩溃!因对领导不满前网管离职后远程入侵服务器,致诊疗系统瘫痪!
- C++核心准则T.10:为所有的模板参数定义概念
- STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!
- 令人肝肠寸断的100个签名
- 小鲨鱼在51nod小学
- linux终端能显示中文,但是不能输入中文的解决方法
- Go 语言实战: 编写可维护 Go 语言代码建议
- 【状压+容斥】BZOJ4455 [ZJOI2016] 小星星
- 2018全球互联网经济大会,春季峰会在南京开幕
- 2022年元旦新年亲子活动方案
热门文章
- 英语 动词过去式和过去分词的变化规则
- 圣人、仁人、君子、善人、士、小人之名简释
- java clone 对象_为什么阿里Java手册推荐慎用 Object 的 clone 方法来拷贝对象
- Cadence 16.6快速创建多引脚芯片原理图符号
- Ubuntu修改/home下各目录为英文
- java bitset javadoc,BitSet的源码研究
- 求方程式ax2bxc0的根c语言,2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根
- MACD:黄白线、红绿柱与0轴关系
- 工作经验分享:为什么我们要写Unti Test
- 抱抱脸(hugging face)教程-中文翻译-使用 Tokenizers 的 tokenizers