[swustoj 243] 又是一年CET46

又是一年CET46(0243)

问题描述

CET46 成绩出来啦,一群学生在谈论他们的成绩。A说他的成绩比B高,B说他的成绩比C低,D说他的成绩和E一样…… 
他们当中可能有人在说谎。你的任务就是判断是否有人在说谎。 
PS: 
A < B 表示A的成绩比B低。 
A > B 表示A的成绩比B高。 
A = B 表示A的成绩和B一样。

输入

有多组数据。对于每组数据 
第一行两个整数 N和M,分别代表有N个学生(编号1—N),和已知的M个关系。(1 < N <= 200 ,0 < M < 40000) 
第二到第M+1行,每行对应一个关系。

输出

如果有人说谎输出 “Someone have told lies!”,否则输出 “Maybe they are all honest!”。

样例输入

4 3
1 < 2
1 < 3
2 > 3
3 3
1 > 2
2 > 3
3 = 1

样例输出

Maybe they are all honest!
Someone have told lies!

由于‘=’的存在,因此先用并查集合并。

额、可能想复杂了,应该有其他简单的方法。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define INF 0x3f3f3f3f
#define N 210
#define M 200200

struct les{
    int a,b;
}p[M];
int tot;
int n,m;
int flag;
int f[N];
int in[N];
int vis[N];
int mpt[N][N];

void init()
{
    tot=0;
    flag=1;
    for(int i=1;i<=n;i++) f[i]=i;
}
int Find(int x)
{
    if(x!=f[x]) f[x]=Find(f[x]);
    return f[x];
}
void UN(int x,int y)
{
    x=Find(x);
    y=Find(y);
    f[x]=y;
}
bool solve()
{
    //build
    int tn=0;
    memset(in,0,sizeof(in));
    memset(vis,0,sizeof(vis));
    memset(mpt,0,sizeof(mpt));
    for(int i=1;i<=tot;i++){
        int a=Find(p[i].a);
        int b=Find(p[i].b);
        if(!vis[a]) vis[a]=1,tn++;
        if(!vis[b]) vis[b]=1,tn++;
        if(!mpt[a][b]){ //重边判断
            mpt[a][b]=1;
            in[b]++;
        }
    }
    //work
    priority_queue<int,vector<int>,greater<int> >q;
    for(int i=1;i<=n;i++){
        if(!in[i] && vis[i]) q.push(i);
    }
    int cnt=0;
    while(!q.empty()){
        int u=q.top();
        q.pop();
        cnt++;
        for(int v=1;v<=n;v++){
            if(mpt[u][v] && vis[v]){
                in[v]--;
                if(!in[v]) q.push(v);
            }
        }
    }
    if(cnt<tn) return 0;
    return 1;
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        init();
        while(m--){
            int a,b;
            char c;
            scanf(" %d %c %d",&a,&c,&b);
            if(!flag) continue;
            if(c!=‘=‘){
                if(Find(a)==Find(b)) flag=0;
                if(c==‘>‘) swap(a,b);
                p[++tot].a=a;
                p[tot].b=b;
            }
            else{
                UN(a,b);
            }
        }
        if(flag){
            flag=solve();
            if(flag) printf("Maybe they are all honest!\n");
            else printf("Someone have told lies!\n");
        }
        else
            printf("Someone have told lies!\n");
    }
    return 0;
}
时间: 2024-07-29 04:28:32

[swustoj 243] 又是一年CET46的相关文章

ZAM 3D 制作简单的3D字幕 流程(二)

原地址:http://www.cnblogs.com/yk250/p/5663907.html 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇将是ZAM 3D制作动画的一些关键点. 我们可以将各个字体工具自己的喜好填充好Materials,当然,也可以采用默认,一般默认灯光下是偏金黄色的,这个可以在左下角进行调节.左下第一个是当前选中的灯光设置,第二个则是全局的灯光设置.(如果你拖动了布局那就另当别论了.)比如我这里将字体染成了葫芦娃的红橙黄绿蓝靛紫以及葫芦小金刚的白色(注意,字体分

软件众包是什么?软件外包又是什么?

软件众包?软件外包?这两个之间有关系吗? 随着互联网时代的发展,有着许多的现代新词出现,面对这些新词,刚了解的我也是一脸懵,身处软件开发行业,接触多了也就自己了解了.软件众包,是指一个公司或机构把过去由员工执行的工作任务,以自由自愿的形式外包给非特定的大众网络的做法.简单地来说,就是一个公司有设计.程序员.前端开发等职位,他们平时是互不相关,但公司突然接到一个项目,需要他们在一起合作完成,这就是所谓的软件众包!那软件外包又是什么呢?软件外包又称资源外包,一般认为它是指企业整合利用其外部最优秀的专

又是一年818,这次苏宁的O2O服务能到位了么?

即将进入8月,苏宁又开始为818大促活动宣传造势了.三年前与京东的一场恶战,让苏宁818名声大震,成为继天猫双十一.京东618之后的电商行业又一主要的大促活动.当年与京东一场恶战之下,苏宁易购的销量急速飙升,唯一遗憾的是当时缺乏足够与销量匹配的物流能力,所以大销量之下暴露了苏宁的服务短板,不知今年818又会如何呢? 又是一年818,苏宁O2O自我证明的一次良机 三年时间过去了,电商热度已被O2O取代,市场焦点发生了扭转,O2O大行其道,在今年初总理提倡的互联网+之下,无论是传统电商,还是传统零售

又是一年毕业时

现在又是毕业季了.这让我想起一些事. 记得那年我毕业的时候,几次和兄弟们喝酒,我在哈哈哈大笑,他们却在哭.有时我说话很直的,不知道是不是太没心没肺. 那一次,和雷子,云风一起在学校后面的7080超市附近喝酒.酒至半酣,我说出了对雷子的一些看法,我说他说话总是不够注意,在公众场合竟然什么都说,特别有女生在的时候,说话也不知保留. 我说着说着,他竟然流起泪哭了起来. 他哭,可能因为有点醉酒,可能因为毕业在即触发伤感,也可能因为我说的话确实让他有意了. 我在没心没肺大笑着说,"来,来,来,喝!&quo

又是正版!Win下ffmpeg源码调试分析二(Step into ffmpeg from Opencv for bugs in debug mode with MSVC)

最近工作忙一直没时间写,但是看看网络上这方面的资源确实少,很多都是linux的(我更爱unix,哈哈),而且很多是直接引入上一篇文章的编译结果来做的.对于使用opencv但是又老是被ffmpeg库坑害的朋友们,可能又爱又恨,毕竟用它处理和分析视频是第一选择,不仅是因为俩者配合使用方便,而且ffmpeg几乎囊括了我所知道的所有解编码器,但是正是因为这个导致了一些bug很难定位,所以有必要考虑一下如何快速定位你的ffmpeg bug. sorry,废话多了.首先给个思路: 1.使opencv 的hi

Codeforces Round #243 (Div. 1)——Sereja and Two Sequences

题目链接 题意:给两个长度分别为n和m的序列,现在有两种操作:1.分别选择两个序列的一个非空前缀,切两个前缀的最后一位相同,删除之,得到1分(只累计),消耗e:2.直接删除两个序列,消耗值定于两个序列之前删除的元素个数之和,并且使得得到的分有效(之前没有有效分) 分析: 首先,问题其实就是转化成,进行若干次操作1,然后进行操作2 还要找到一个判别标准,来评判较优的状态(贪心) 每次的消耗值比较大,其实可以计算出最大的删除次数,这个值不是很大 状态表示: 简单的,一个状态可以表示为串A的位置.串B

洛谷P1372 又是毕业季I&amp;&amp;P1414 又是毕业季II[最大公约数]

P1372 又是毕业季I 题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定是一生最难忘的时刻! 题目描述 为了把毕业晚会办得更好,老师想要挑出默契程度最大的k个人参与毕业晚会彩排.可是如何挑呢?老师列出全班同学的号数1,2,……,n,并且相信k个人的默契程度便是他们的最大公约数(这不是迷信哦~).这可难为了他,请你帮帮忙吧! PS:一个数的最大公

4G+又是神马鬼?和LTE-A有什么关系?

4G+又是神马鬼?和LTE-A有什么关系? 先说LTE 和LTE-A LTE全称long-term-evolution这个名字听怎么听怎么觉得有些仓促,它又称为3.9G,其上行峰值速率和最大带宽略低于4G标准,真正将网络带入4G的是LTE-Advanced,即LTE-A. LTE-A是一个LTE演进的代称,它满足ITU-R 的IMT-Advanced技术征集的需求,不仅是3GPP形成欧洲IMT-Advanced技术提案的一个重要来源,还是一个后向兼容的技术,完全兼容LTE,是演进而不是革命.它的

这个“天才”这一年又是在原地踏步!”

中年男子话刚刚脱口,便是不出意外的在人头汹涌的广场上带起了一阵嘲讽的sāo动. "三段?嘿嘿,果然不出我所料,这个"天才"这一年又是在原地踏步!" "哎,这废物真是把家族的脸都给丢光了." ij72dd96dw88wh22ky49cm51te89yt75ps05lm29vt57xc30ku48uj20bn12gc08qn03zd75wp65lv54mi29bs77bi10gx06ik72gl33dx88ds23nd37cn76jr43og30pt