确定大小
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 50(15 users) Total Accepted: 12(11 users) Rating: Special Judge: No
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的更多相关文章

  1. 轮值CEO胡厚崑:到2025年所有的企业都将用到云(云的2.0时代,会有几千朵云几万朵云升起来,这将产生不同的技术模式、商业模式、思维模式)

    2016年09月04日 07:38 中国经营报   李凡 在全国工商联“2016年中国民营企业500强”排行榜上夺得头把交椅的华为,向外界描绘了面向未来进一步做大做强的路径. 华为创始人任正非于201 ...

  2. URAL 2025. Line Fighting (math)

    2025. Line Fighting Time limit: 1.0 second Memory limit: 64 MB Boxing, karate, sambo- The audience i ...

  3. 2025战略,中秋送福利!免费开源ERP Odoo Windows 一键傻瓜式安装版发布

    概述 为了帮助更多的小白,能够快速的体验Odoo的强大功能,针对国内大多数小白用户无法快速直接体验Odoo的尴尬,开源智造呕心沥血,历经数百次的测试和整合终于赶在中秋节这天将Odoo所需要的复杂运行环 ...

  4. loj #2025. 「JLOI / SHOI2016」方

    #2025. 「JLOI / SHOI2016」方   题目描述 上帝说,不要圆,要方,于是便有了这道题. 由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形.上帝把我们派到了一个有 NNN ...

  5. "中国制造2025"+"互联网+",引领制造业发展

    "中国制造2025"+"互联网+",引领制造业发展

  6. 2025年VR虚拟现实技术将渗透人们日常生活

    2025年VR虚拟现实技术将给人们带来什么好处?今年早些时候,虚拟现实VR游戏制造商Survios在广州一个非常大的购物中心内的一个小型灰色墙壁店面,通过AMC中心植入了其位置游戏市场上的第一面旗帜. ...

  7. 2022Gartner容器预测:2025年85%的企业将使用容器管理服务

    近日,国际知名权威分析机构Gartner发布了最新<全球容器管理预测>.预测中指出:在加速的数字化转型驱动下,到2025年全球容器管理领域市场规模将突破14亿美元,预计年复合增长率将达到2 ...

  8. poj 1806 Manhattan 2025

    点击打开链接 题目大意就是给定一个最大歩数,让你输出你在三维的空间中可以到达的位置的切片,注意当歩数大于9的时候就不需要输出了! #include<stdio.h> #include< ...

  9. hlg 2130 状压dp

    基本的状压dp 需要注意的是两点之间直线最短 所以不需要进行floyd 由于把dp的memset放在了初始化0的后面de了好久的bug.. #include<stdio.h> #inclu ...

随机推荐

  1. systemback-----做你折腾的后盾

    http://imcn.me/html/y2015/24421.html ubuntu的系统还原工具,最近在学习grunt,要安装nodejs 等一些依赖,对于有轻微系统洁癖的我来说是个好的解决方案, ...

  2. SpringBoot 2.x (11):定时任务与异步任务

    定时任务:有时候我们需要做定时的一些操作,比如统计信息,定时发送邮件等 在SpringBoot中如何进行整合和使用呢? 有哪些方式可以实现定时任务呢? Java自带的java.util.timer: ...

  3. [转]Fedora 下安装NVIDIA显卡驱动(使用后无法进入图形界面)

    http://www.linuxidc.com/Linux/2014-04/100689.htm rpmfusion安装法: 相对于ATi,在Linux下安装NVIDIA就简单得多.只需要一个命令即可 ...

  4. Apache is running a threaded MPM, but your PHP module is not compiled to be threadsafe. you need to recompile php. pre-configuration failed

    手动配置想要组合版本的wamp环境时,在服务器上直接下载的几个安装包怎么都组合安装不成功,纠结很久,终于找到原因.配置apache支持php后apache一直无法成功启动.后来发现php是nts的版本 ...

  5. 在Window上用cmd创建.htaccess文件

    Windows 图形下不能直接建立空名字的文件,所以没法直接创建.htaccess文件,不过可以通过命令行创建: cd /path/to/your/dir/ type nul>.htaccess ...

  6. MFC程序添加快捷键

    [问题提出]     有的程序需要自定义组合键完成一定功能,如何实现? [解决方法]     RegisterHotKey函数原型及说明:     BOOL RegisterHotKey(     H ...

  7. SPM-软件项目管理之感想

    这学期开始选择选修课的时候是需要把每节课都过一遍的.当我上完SPM那节课的时候,我就已经决定要选这门课了,尽管还有其他的课我都还没上过.由于这节课是双语教学-中文老师兼外籍老师,这样的方式感觉很新颖, ...

  8. Azure 项目构建 – 构建和部署 .NET 应用程序

    本课程主要介绍了如何在 Azure 平台上快速构建和部署基于 .NET 语言的 Web 应用, 实践讲解如何使用 Azure 门户创建 Web 应用, 部署 ASP.NET 代码, 连接 Azure ...

  9. Nginx性能优化参考

    nginx性能优化参考 1)调整配置文件中的配置项的值(配置文件:nginx.conf) worker_processes auto;开启的进程数,一般配置为跟逻辑CPU核数一样worker_rlim ...

  10. EJB2.0教程 详解EJB技术及实现原理

    EJB是什么呢?EJB是一个J2EE体系中的组件.再简单的说它是一个能够远程调用的javaBean.它同普通的javaBean有两点不同.第一点,就是远程调用.第二点,就是事务的功能,我们在EJB中声 ...