hdu2094—看似拓扑实际上是一道思维题

HDU2094  产生冠军

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2094

题意:中文题,就不解释了。题意已经非常清楚了。

这道题的看起来像是一个拓扑排序的问题实际上拓扑感觉做不了,可能可以做了吧?但是我没想到,估计也比较麻烦吧。这里介绍一种比较简单的做法,就是一种思维,如果存在冠军(所有人都可以被他打败),这个人肯定没有败过,而其他人都败过,所以我们只需要确定所有人的人数,和败者的人数(去重以后,所以需要用set,因为一个败者会败给多个人,所以在多个对局中出现)。如果所有人的数量与败者的数量的差是1,说明存在冠军,否则,不存在,直接看代码吧!

//Author: xiaowuga
#include <bits/stdc++.h>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
const long long N=100;
using namespace std;
typedef long long L;
set<string>a,b;
int main() {
    ios::sync_with_stdio(false);cin.tie(0);
    int n;
    while(cin>>n&&n){
        a.clear();b.clear();
        for(int i=0;i<n;i++){
            string x,y;
            cin>>x>>y;
            a.insert(x);
            a.insert(y);
            b.insert(y);
        }
        if(a.size()-b.size()==1) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}

很简单的一道题,主要靠思维吧,感觉和拓扑没什么关系。

时间: 2024-11-05 20:31:32

hdu2094—看似拓扑实际上是一道思维题的相关文章

一道思维题 &amp;&amp;递归改循环

思路: 比如5 2 12345--> 1245 从3开始,这时候5变成了1.剩下4512,对应1234.只需要找到现在n-1,k中的数对应原来的编号的映射.比如1-->3 是1+2 mod 5,4-->1是4+2 mod 5. 这就形成了递归. 这样递归到最后剩一个数,结果就是这个数. 这样的问题是mod n后从0开始, 解决办法1:返回时+1 #include <iostream> using namespace std; int A(int n, int k) { if

Report,又是一道思维题

题目: Each month Blake gets the report containing main economic indicators of the company "Blake Technologies". There are n commodities produced by the company. For each of them there is exactly one integer in the final report, that denotes corres

Aaronson 一道思维题

中文题目链接 Recently, Peter saw the equation x0+2x1+4x2+...+2mxm=nx0+2x1+4x2+...+2mxm=n. He wants to find a solution (x0,x1,x2,...,xm)(x0,x1,x2,...,xm) in such a manner that ∑i=0mxi∑i=0mxi is minimum and every xixi (0≤i≤m0≤i≤m) is non-negative. InputThere

一道看似非常难的面试算法题

这是昨天面试百度时碰到的一道算法题:任意数分三组,使得每组的和尽量相等.由于时间仓促,加之面试时头昏脑涨,这道题没做出来甚至没有给出思路,这让我多少有些遗憾和不甘.因为最近接触算法的东西较多而且本身对算法感兴趣,所以回家之后绞尽脑汁想把这题做出来.其实刚看到这题时感觉不难,但是因为数字个数及数值的不确定,我感觉这题越想越难.昨天一晚上没有睡好,甚至做梦都在想这题! 今天上午在多个群里问了这题,都没有给出思路,真是绝望至极.很多人都说 n/3 的思路,其实这种思路一开始就是死胡同.本人属于那种不会

一天一道算法题---6.26---二分查找

感谢微信平台---一天一道算法题----每天多一点进步-- 好累啊  现在在用win7自带的输入法 打起来真麻烦 快点把这2天的搞完就重装了 还是直接来源于----〉 待字闺中 分析 给定一个数组A,其中有一个位置被称为Magic Index,含义是:如果i是Magic Index,则A[i] = i.假设A中的元素递增有序.且不重复,请给出方法,找到这个Magic Index.更进一步,当A中允许有重复的元素,该怎么办呢? 没有重复元素的情况 一些同学在遇到这个题目的时候,往往会觉得比较简单.

智商的比拼——思维题思考指南

智商的比拼--思维题思考指南 最近做了几道思维题,感觉思维题就是烧脑,而且费劲,而且做不出QAQ!! 思维题可能分一下几个类别吧 鲨壁结论题.神犇之于结论题,如鱼之于水.而我之于结论题,QAQ. 数论大法好.有些题目直接数学建模找结论啊QAQ,就比如[Running]这道题,关键性的东西就是\((a_i,n)|\ l\),实际上这个就是数学建立同余方程然后得出来的一个浅显结论(我找这个"浅显"的结论花了\(30min\) \(QAQ\)). 代数大法好.实际上和前面那个重合了,不过拿出

每天一道Java题[11]

题目 synchronized怎么实现线程同步?请修改<每天一道Java题[10]>中的MyRunnableThread类以解决三个线程都获取到10的问题. 解答 方法一: 采用synchronized关键字包裹需要保证线程安全的代码块,来实现线程同步.语法格式为: Synchronized(expression){ //需同步的代码 } <每天一道Java题[10]>中的MyRunnableThread类修改为: package me.huangzijian; public cl

每天一道Java题[3]

问题 为什么在重写equals()方法的同时,必须重写hashCode()方法? 解答 在<每天一道Java题[2]>中,已经对hashCode()能否判断两个对象是否相等做出了解释.equals()方法与hashCode()方法的关系如下: 如果两个对象的hashCode()返回值不一样,则equals()返回的结果必为false. 如果两个对象的hashCode()返回值一样的时候,equals()返回的结果未知. 如果两个对象的equals()返回的结果为true,则两个对象的hashC

一天一道算法题--6.25--无定义

感谢微信平台---一天一道算法题--每天多一点进步---- 其实今天我接下去补上的几题都来自---待字闺中 所以我就原封不动的将它的题目与分析搬过来了 原题 给定一个数组,我们可以找到两个不相交的.并且是连续的子数组A和B,A中的数字和为sum(A), B中的元素和为sum(B).找到这样的A和B,满足sum(A) - sum(B)的绝对值是最大的. 例如:[2, -1 -2, 1, -4, 2, 8]划分为A=[-1, -2, 1, -4], B=[2, 8], 最大的值为16 分析 如果没有