HLG 2025
| 确定大小 | ||||||
|
||||||
| Description | ||||||
| 现在有N个字母,(N <= 26),我们称之为A、B、C、D......。这次他们之间想确定大小关系。 但是现在只有一些残缺不全的关系,比如A > Z,然后没了...... 现在给出N个字母,(前N个大写字母),然后给出M个关系,每个关系只有大于和小于两种。 最后判断那些是可以确定他应有的大小位置的。 (没有给出的关系,均属于不可确定) |
||||||
| Input | ||||||
| 多组测试数据:每组测试数据: 第一行两个整数N,M。 接下来M行,每行一个关系,形式如:A>B A<B (M < 30) |
||||||
| Output | ||||||
| 按照ABCD...的顺序,输出可以确定的势力和他的排名。 如果都不可以确定,则输出-1。 |
||||||
| Sample Input | ||||||
| 3 2 A>B B>C 3 3 A>B B>C C>A |
||||||
| Sample Output | ||||||
| A 1 B 2 C 3 -1 |
||||||
| Source |
本题要求输出可以确定的人的排名2,首先需要建两个图,正向建一个反向建一个。
由于是有向图,对两个图中的每一个点进行bfs,记录以他为起始点所能扩展的点的数量
我的程序中用head和tail数组进行存储的。对于每个点,如何head值和tail值加起来的和为n-1
那么这个点的名次就是可以确定的了,
他的名次其实就是tail的值+1
还有一个问题就是结构体edge大小的问题
,我刚开始开的maxn,结果wa了,他的大小应该为2*maxn
#include<stdio.h>
#include<iostream>
#include<queue>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=;
int head[maxn],tail[maxn];
int vis[maxn];
struct Edge{
int to;
int next;
}edge1[maxn*],edge2[maxn*];
int head1[maxn];
int head2[maxn];
int tot1,tot2;
int n,q;
void addedge(int u,int v){
edge1[tot1].to=v;
edge1[tot1].next=head1[u];
head1[u]=tot1++;
edge2[tot2].to=u;
edge2[tot2].next=head2[v];
head2[v]=tot2++;
}
int head_num,tail_num;
void head_bfs(int u){
for(int i=;i<=n;i++)
vis[i]=;
vis[u]=;
queue<int>q;
q.push(u);
int v;
while(!q.empty()){
v=q.front();
q.pop();
for(int i=head1[v];i!=-;i=edge1[i].next){
if(!vis[edge1[i].to]){
vis[edge1[i].to]=;
q.push(edge1[i].to);
head_num++;
}
}
}
}
void tail_bfs(int u){
for(int i=;i<=n;i++)
vis[i]=;
vis[u]=;
queue<int>q;
q.push(u);
int v;
while(!q.empty()){
v=q.front();
q.pop();
for(int i=head2[v];i!=-;i=edge2[i].next){
if(!vis[edge2[i].to]){
vis[edge2[i].to]=;
q.push(edge2[i].to);
tail_num++;
}
}
}
}
void init(){
tot1=;
tot2=;
memset(head1,-,sizeof(head1));
memset(head2,-,sizeof(head2));
}
int main(){ while(scanf("%d%d",&n,&q)!=EOF){
init();
char u,v,temp;
getchar();
int u1,v1;
for(int i=;i<=q;i++){
scanf("%c%c%c",&u,&temp,&v);
getchar();
u1=u-'A'+;
v1=v-'A'+;
if(temp=='>')
addedge(u1,v1);
else
addedge(v1,u1);
}
int cnt;
for(int i=;i<=n;i++){
head_num=;
head_bfs(i);
head[i]=head_num;
tail_num=;
tail_bfs(i);
tail[i]=tail_num;
}
bool flag=false;
char c='A';
for(int i=;i<=n;i++){
if(head[i]+tail[i]==n-){
printf("%c %d\n",c+i-,tail[i]+);
flag=true;
}
}
if(!flag)
printf("-1\n");
}
return ;
}
HLG 2025的更多相关文章
- 轮值CEO胡厚崑:到2025年所有的企业都将用到云(云的2.0时代,会有几千朵云几万朵云升起来,这将产生不同的技术模式、商业模式、思维模式)
2016年09月04日 07:38 中国经营报 李凡 在全国工商联“2016年中国民营企业500强”排行榜上夺得头把交椅的华为,向外界描绘了面向未来进一步做大做强的路径. 华为创始人任正非于201 ...
- URAL 2025. Line Fighting (math)
2025. Line Fighting Time limit: 1.0 second Memory limit: 64 MB Boxing, karate, sambo- The audience i ...
- 2025战略,中秋送福利!免费开源ERP Odoo Windows 一键傻瓜式安装版发布
概述 为了帮助更多的小白,能够快速的体验Odoo的强大功能,针对国内大多数小白用户无法快速直接体验Odoo的尴尬,开源智造呕心沥血,历经数百次的测试和整合终于赶在中秋节这天将Odoo所需要的复杂运行环 ...
- loj #2025. 「JLOI / SHOI2016」方
#2025. 「JLOI / SHOI2016」方 题目描述 上帝说,不要圆,要方,于是便有了这道题. 由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形.上帝把我们派到了一个有 NNN ...
- "中国制造2025"+"互联网+",引领制造业发展
"中国制造2025"+"互联网+",引领制造业发展
- 2025年VR虚拟现实技术将渗透人们日常生活
2025年VR虚拟现实技术将给人们带来什么好处?今年早些时候,虚拟现实VR游戏制造商Survios在广州一个非常大的购物中心内的一个小型灰色墙壁店面,通过AMC中心植入了其位置游戏市场上的第一面旗帜. ...
- 2022Gartner容器预测:2025年85%的企业将使用容器管理服务
近日,国际知名权威分析机构Gartner发布了最新<全球容器管理预测>.预测中指出:在加速的数字化转型驱动下,到2025年全球容器管理领域市场规模将突破14亿美元,预计年复合增长率将达到2 ...
- poj 1806 Manhattan 2025
点击打开链接 题目大意就是给定一个最大歩数,让你输出你在三维的空间中可以到达的位置的切片,注意当歩数大于9的时候就不需要输出了! #include<stdio.h> #include< ...
- hlg 2130 状压dp
基本的状压dp 需要注意的是两点之间直线最短 所以不需要进行floyd 由于把dp的memset放在了初始化0的后面de了好久的bug.. #include<stdio.h> #inclu ...
随机推荐
- 5、两个栈实现队列------------>剑指offer系列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 栈1: 用于入队列存储 栈2: 出队列时将栈1的数据依次出栈,并入栈到栈2中 栈2出栈即栈1的底部数据 ...
- VBA小记
要放假了,可是我们,我还是煎熬! 最让人不爽的是媳妇也需要加班加点的完成一些看起来很EASY的事: 统计数据,把几个表合并…… EXCEL本人还是懂得一点点的(我不想说我是学计算机的,我怕给学计算机的 ...
- cvCanny的参数
cvCanny 函数功能:采用Canny方法对图像进行边缘检测 函数原型: void cvCanny( const CvArr* image, CvArr* edges, double thresho ...
- IDEA 启用/禁用 Run Dashboard
一.启用 方式一: 创建/打开一个SpringBoot项目[或者点击Run --> Edit Configurations 添加 Spring Boot 类型的项目配置:或者如图在红框处添加配置 ...
- 求矩阵的n次方 c语言实现
矩阵的n次方,比较容易理解的想法是递归. 思路是这样的,把n分成两部分,当n是偶数的时候,即为左右两边的乘积,如果n是奇数,即为左右两边的乘积再乘a ) matrixn())^*a else matr ...
- WPF中退出时显示是否保存数据提示
一.通过窗体中的按钮实现退出时数据保存提示 Xaml: <Grid> <TextBlock HorizontalAlignment="Left" Margin=& ...
- 实验3 分支&循环语句(1)
part 1 1.在循环中使用控制语句continue和break,其功能区别是: continue:只控制本次循环的结束. break:终止并跳出循环,之后的循环也不再执行. 2.在两层嵌套循环中 ...
- LeetCode || 双指针 / 单调栈
11. Container With Most Water 题意:取两根求最大体积 思路:使用两个指针分别指向头和尾,然后考虑左右两根: 对于小的那根,如果选择了它,那么能够产生的最大体积一定是当前的 ...
- ios坐标系统
在写程序的时候发现,iOS下的坐标.位置很容易弄乱,特别是在不同的坐标系统中,必须完成弄明白一些概念才能做相应的变化,例如CoreImage和UIView的坐标系统就截然不同,一个是以屏幕的左上角为原 ...
- [LUOGU] P1387 最大正方形
题目描述 在一个n*m的只包含0和1的矩阵里找出一个不包含0的最大正方形,输出边长. 输入输出格式 输入格式: 输入文件第一行为两个整数n,m(1<=n,m<=100),接下来n行,每行m ...

