Loj 1003–Drunk(拓扑排序)
1003 - Drunk
PDF (English)
Statistics
Forum
Time Limit: 2 second(s)
Memory Limit: 32 MB
One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So, one day I was talking to him, about his drinks! He began to describe his way of drinking. So, let me share his ideas a bit. I am expressing in my words.
There are many kinds of drinks, which he used to take. But there are some rules; there are some drinks that have some pre requisites. Suppose if you want to take wine, you should have taken soda, water before it. That's why to get real drunk is not that easy.
Now given the name of some drinks! And the prerequisites of the drinks, you have to say that whether it's possible to get drunk or not. To get drunk, a person should take all the drinks.
Input
Input starts with an integer T (≤ 50), denoting the number of test cases.
Each case starts with an integer m (1 ≤ m ≤ 10000). Each of the next m lines will contain two names each in the format a b, denoting that you must have a before having b. The names will contain at most10 characters with no blanks.
Output
For each case, print the case number and 'Yes' or 'No', depending on whether it's possible to get drunk or not.
Sample Input
2
2
soda wine
water wine
3
soda wine
water wine
wine water
Output for Sample Input
Case 1: Yes
Case 2: No
::学习一个新算法,总没那么容易,今天又因为一个弄错一个字母找了半天*.*!!
1: #include <iostream>
2: #include <cstdio>
3: #include <algorithm>
4: #include <cstring>
5: #include <map>
6: using namespace std;
7: const int maxn=11000;
8: int head[maxn],in[maxn];
9: bool vis[maxn];
10: int ant,cas=1,id;
11:
12: map<string,int>a;
13: struct EDGE{
14: int v, next;
15: EDGE(){}
16: EDGE(int _v, int _next){v = _v, next = _next;}
17: }e[maxn];
18: int ecnt;
19:
20: void add(int u, int v){
21: e[ecnt] = EDGE(v, head[u]);
22: head[u] = ecnt++;
23: }
24:
25: bool topo(){
26: memset(vis, 0, sizeof(vis));
27:
28: for(int t = 0; t < id; t++){
29: int u;
30: for(u = 0; u < id; u++)
31: if(!vis[u] && !in[u])
32: break;
33: if(u >= id)
34: return false;
35:
36: vis[u] = true;
37: in[u]--;
38: for(int i = head[u]; i != -1; i = e[i].next){
39: int v = e[i].v;
40: in[v]--;
41: }
42: }
43: return true;
44: }
45:
46: void solve()
47: {
48: int n;
49: ecnt=0,id=0;
50: a.clear();
51: memset(head,-1,sizeof(head));
52: memset(in,0,sizeof(in));
53: cin>>n;
54:
55: while(n--)
56: {
57: string x,y;
58: cin>>x>>y;
59:
60: if(a.find(x)==a.end()) a[x]=id++;
61: if(a.find(y)==a.end()) a[y]=id++;
62: int u=a[x],v=a[y];
63: add(u,v);
64: in[v]++;
65: }
66: if(topo())
67: cout<<"Yes"<<endl;
68: else
69: cout<<"No"<<endl;
70: }
71:
72: int main()
73: {
74: ios::sync_with_stdio(false);
75: int t, cas = 0;
76: cin>>t;
77: while(t--){
78: cout<<"Case "<< (++cas)<<": ";
79: solve();
80: }
81: return 0;
82: }
Loj 1003–Drunk(拓扑排序)的更多相关文章
- Lightoj 1003 - Drunk(拓扑排序)
One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So ...
- Lightoj 1003 - Drunk(拓扑排序判断是否有环 Map离散化)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1003 题意是有m个关系格式是a b:表示想要和b必须喝a,问一个人是否喝醉就看一个人是 ...
- [LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset)
[LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset) 题面 题面较长,略 分析 首先,发现火星人只有死和活两种状态,考虑2-SAT 建图 ...
- 洛谷 P3975 / loj 2102 [TJOI2015] 弦论 题解【后缀自动机】【拓扑排序】
后缀自动机入门. 题目描述 为了提高智商,ZJY 开始学习弦论. 这一天,她在<String theory>中看到了这样一道问题:对于一个给定的长度为 \(n\) 的字符串,求出它的第 \ ...
- 洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】
组合计数的一道好题.什么非主流题目 题目背景 (背景冗长请到题目页面查看) 题目描述 不妨假设枫叶上有 \(n\) 个穴位,穴位的编号为 \(1\sim n\).有若干条有向的脉络连接着这些穴位. ...
- 洛谷P4332 [SHOI2014]三叉神经树(LCT,树剖,二分查找,拓扑排序)
洛谷题目传送门 你谷无题解于是来补一发 随便百度题解,发现了不少诸如树剖\(log^3\)LCT\(log^2\)的可怕描述...... 于是来想想怎么利用题目的性质,把复杂度降下来. 首先,每个点的 ...
- LightOJ1003---Drunk(拓扑排序判环)
One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So ...
- HDU2094产生冠军 (拓扑排序)
HDU2094产生冠军 Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则如下: 如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认 ...
- LightOJ - 1003 Drunk
One of my friends is always drunk. So, sometimes I get a bit confused whether he is drunk or not. So ...
随机推荐
- ASP.NET的简单与面向对象开发
ASP.NET开发,一开始是为了超赶时间完成任务,只能把功能实现即可.如下面一个功能,在网页中有一个铵钮,用户点一点切换网页的图片,再点一点又切换回来.我们要怎样做?在铵钮事件中去变更图片的路径即可. ...
- BootStrap栅格系统原理 笔记
1.内容居中:效果 关键代码: <div class="container"> .........之前上面添加在body标签下的代码 </div>添加cla ...
- [转] 基于 Apache Mahout 构建社会化推荐引擎
来源:http://www.ibm.com/developerworks/cn/java/j-lo-mahout/index.html 推荐引擎简介 推荐引擎利用特殊的信息过滤(IF,Informat ...
- vim 正则替换
http://www.cppblog.com/kefeng/archive/2010/10/20/130574.html Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作. ...
- No.002:Add Two Numbers
问题: You are given two linked lists representing two non-negative numbers. The digits are stored in ...
- Maven初步搭建 (一)
什么是maven? 也许很多人开始的时候跟我一样,在看了很多工程之后都不知道这个鸟东西到底是用来干嘛用的!:-D 一个东西之所以会出现是有其原因的,譬如Linus大神写git. Maven项目对象模型 ...
- SAPScript、Smartforms动态打印图像或者背景图片
在利用 SMARTFORMS 进行打印的时候有时候要求输出的图片可能是随着打印内容的不同而不同了,也就是动态输出图片,SMARTFORMS的提供了相关的支持技术,下面是实现截图 1.创建要显示的图片 ...
- ArcEngine中License权限等级更改的问题
曾经认为自己对于ArcGIS 开发许可问题比较理解了,并小结在<ArcEngine10.x开发的许可问题>中. 01.权限问题 今天在调用GP时失败(插值式开发,使用的是他人框架),因为需 ...
- XCode的代码块备份
以上三个的注释可以从下面的代码依据个数拷贝和删除: /** * <#comment#> * * @param <#one#> * * @param <#two#> ...
- ReSharper 8.XXX 注册机
今天给电脑重装系统,发现Rsharper已经更新到8.0.14.856了,于是下载新版本的,但像咱搞开发的,肯定不能用付费软件(关键是你也付不起啊,499$,499刀啊).于是在网上找相关的激活软件. ...