MZOJ #70 FFF团

分析

没太多好说的,强连通缩点,然后拓扑排序,一旦某一时刻有两个及以上入度为零的点,则不可能

代码

  1 /**************************
  2 User:Mandy.H.Y
  3 Language:c++
  4 Problem:FFF
  5 Apgorithm:
  6 **************************/
  7
  8 #include<bits/stdc++.h>
  9 #define Max(x,y) ((x) > (y) ? (x) : (y))
 10 #define Min(x,y) ((x) < (y) ? (x) : (y))
 11
 12 using namespace std;
 13
 14 const int maxn = 1005;
 15 const int maxm = 6005;
 16
 17 int t,n,m,size,first[maxn],first1[maxn],size1;
 18 int dfn[maxn],low[maxn],tot,cnt,ind[maxn],father[maxn];
 19 int s[maxn],tp;
 20 bool vis[maxn];
 21
 22 struct Edge{
 23     int u,v,nt;
 24 }edge[maxm],edge1[maxm];
 25
 26 template<class T>inline void read(T &x){
 27     x = 0;bool flag = 0;char ch = getchar();
 28     while(!isdigit(ch)) flag |= ch == ‘-‘,ch = getchar();
 29     while(isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48),ch = getchar();
 30     if(flag) x = -x;
 31 }
 32
 33 template<class T>void putch(const T x){
 34     if(x > 9) putch(x / 10);
 35     putchar(x % 10 | 48);
 36 }
 37
 38 template<class T>void put(const T x){
 39     if(x < 0) putchar(‘-‘),putch(-x);
 40     else putch(x);
 41 }
 42
 43 void file(){
 44     freopen("FFF.in","r",stdin);
 45     freopen("FFF.out","w",stdout);
 46 }
 47
 48 void init(){
 49     memset(first,0,sizeof(first));
 50     memset(father,0,sizeof(father));
 51     memset(dfn,0,sizeof(dfn));
 52     memset(low,0,sizeof(low));
 53     memset(vis,0,sizeof(vis));
 54     memset(edge,0,sizeof(edge));
 55     memset(edge1,0,sizeof(edge1));
 56     size = 0;tp = 0;size1 = 0;cnt = 0;
 57     tot = 0;
 58 }
 59
 60 void eadd(int u,int v){
 61     edge[++size].v = v;
 62     edge[size].u = u;
 63     edge[size].nt = first[u];
 64     first[u] = size;
 65 }
 66
 67 void eadd1(int u,int v){
 68     edge1[++size1].v = v;
 69     edge1[size1].u = u;
 70     edge1[size1].nt = first1[u];
 71     first1[u] = size1;
 72 }
 73
 74
 75 void tarjan(int u){
 76     dfn[u] = low[u] = ++tot;
 77     vis[u] = 1;
 78     s[tp++] = u;
 79
 80     for(int i = first[u];i;i = edge[i].nt){
 81         int v = edge[i].v;
 82         if(!dfn[v]){
 83             tarjan(v);
 84             low[u] = min(low[u],low[v]);
 85         }else if(vis[v]) low[u] = min(low[u],dfn[v]);
 86     }
 87
 88     if(dfn[u] == low[u]){
 89         int x;++cnt;
 90         do{
 91             x = s[tp-1];
 92             tp--;
 93             father[x] = cnt;
 94             vis[x] = 0;
 95         }while(x != u);
 96     }
 97 }
 98
 99 bool tpsort(){
100     tp = 0;
101     for(int i = 1;i <= cnt; ++ i) if(!ind[i]) s[tp] = i,tp++;
102     if(tp >= 2) return 0;
103     while(tp){
104         if(tp >= 2) return 0;
105         int u = s[tp-1];
106         tp--;
107         for(int i = first1[u];i;i = edge1[i].nt){
108             int v = edge1[i].v;
109             --ind[v];
110             if(!ind[v]) s[tp] = v,tp++;
111             if(tp >= 2) return 0;
112         }
113         if(tp >= 2) return 0;
114     }
115     return 1;
116 }
117
118 void readdata(){
119         read(n);read(m);
120     for(int i = 1;i <= m; ++ i){
121         int u,v;
122         read(u);read(v);
123         eadd(u,v);
124     }
125
126 }
127
128 void Tarjan(){
129     for(int i = 1;i <= n; ++ i){
130         if(!dfn[i]) tarjan(i);
131         ind[i] = first1[i] = 0;
132     }
133
134 }
135
136 void EADD(){
137     for(int i = 1;i <= m; ++ i){
138         int u = edge[i].u;
139         int v = edge[i].v;
140         if(father[u] != father[v]){
141             ind[father[v]]++;
142             eadd1(father[u],father[v]);
143         }
144     }
145
146 }
147
148 void work(){
149     init();
150     readdata();
151     Tarjan();
152     EADD();
153     if(tpsort()){
154         puts("I love you my love and our love save us!");
155     }else puts("Light my fire!");
156 }
157
158 int main(){
159 //    file();
160     read(t);
161     while(t--)
162         work();
163     return 0;
164 }

原文地址:https://www.cnblogs.com/Mandy-H-Y/p/11442935.html

时间: 2024-10-30 07:14:21

MZOJ #70 FFF团的相关文章

CodeVS4416 FFF 团卧底的后宫

题目描述 Description 你在某日收到了 FFF 团卧底的求助,在他某日旅游回来,他的后宫们出现了一些不可调和的矛盾,如果 FFF 团卧底把自己的宝贝分给 a 号妹子,那么 b 号妹子至少要在站在 a 号妹子的右边距离 d,妹子才愿意得到那个宝贝.可是后宫里也有玩得好的妹子呀,她们总是渴望亲近一点,如果把自己的宝贝分给 a 号妹子,那么与她亲近的妹子与 a 号妹子的距离不会超过 l.现在总共有 n 个妹子,k 个这样的矛盾关系,m 个亲近关系.假设他的宝贝是无限的,保证每一个妹子都有宝贝

D FFF团的怒火

Time Limit:1000MS  Memory Limit:65535K 题型: 编程题   语言: 无限制 描述 在信软学院,男女比例失衡已经是习以为常的事情. 在这样的一个学院,诞生了一个神秘的组织,FFF团. O O O /F\/F\/F / \/ \/ 他们的任务是将一切不是真爱的爱情扼杀在摇篮中. 对于某些信软学院的学生,每天都只有一些时间是空闲的,其他时间都只能默默地打代码. 在这段空闲的时间里,所有男生都会去寻找一位空闲的女生,希望能与其进行一次美妙的约会. 然而FFF团的团长

codevs4419 FFF 团卧底的菊花

题目描述 Description FFF 团卧底在这次出题后就知道他的菊花可能有巨大的危险,于是他提前摆布好了菊花阵,现在菊花阵里有若干朵菊花,出现次数最多的那一朵就是出题人的,你的任务是需要找出出题人的菊花. 输入描述 Input Description 第一行为 n 第二行为 n 朵菊花 输出描述 Output Description 一行,为出题人的菊花 样例输入 Sample Input 5 1 1 1 2 3 样例输出 Sample Output 1 数据范围及提示 Data Size

17984 FFF团的怒火

17984 FFF团的怒火 该题有题解 时间限制:1000MS  内存限制:65535K提交次数:55 通过次数:3 收入:3 题型: 编程题   语言: G++;GCC;VC;JAVA Description 在信软学院,男女比例失衡已经是习以为常的事情. 在这样的一个学院,诞生了一个神秘的组织,FFF团. O O O /F\/F\/F / \/ \/ 他们的任务是将一切不是真爱的爱情扼杀在摇篮中. 对于某些信软学院的学生,每天都只有一些时间是空闲的,其他时间都只能默默地打代码. 在这段空闲的

[CTSC 2012][BZOJ 2806]Cheat

真是一道好题喵~ 果然自动机什么的就是要和 dp 搞基才是王道有木有! A:连 CTSC 都叫我们搞基,果然身为一个程序猿,加入 FFF 团是我此生最明智的选择.妹子什么闪边去,大家一起来搞基吧! Q:教练你是什么时候产生了 dp 和自动机是同性的错觉~ 教练你又是什么时候产生了你还有个不入团的选择 ( 妹 子 )这样的错觉~ A:显而易见的,我们…… Q:教练不要转移话题啊! A:显而易见的,我们先搞一个后缀自动机…… Q:等等,教练,多串的自动机要怎么写? A:把几个串并在一起不就好了? Q

华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

华南师大 2017 年 ACM 程序设计竞赛新生初赛题解 华南师范大学第很多届 ACM 程序设计竞赛新生赛(初赛)在 2017 年 11 月 20 日 - 27 日成功举行,共有 146 名同学有效参赛(做出 1 题).进入决赛的资格初定为完成并通过 5 题或以上,决赛时间是 12 月 3 日,地点未定. 题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也

并查集应用

题目描述: One way that the police finds the head of a gang is to check people's phone calls. If there is a phone call between A and B, we say that A and B is related. The weight of a relation is defined to be the total time length of all the phone calls

HXY烧情侣(洛谷 2194)

题目描述 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里有n座电影院,n对情侣分别在每座电影院里,然后电影院里都有汽油,但是要使用它需要一定的费用.m条单向通道连接相邻的两对情侣所在电影院.然后HXY有个绝技,如果她能从一个点开始烧,最后回到这个点,那么烧这条回路上的情侣的费用只需要该点的汽油费即可.并且每对情侣只需烧一遍,电影院可以重复去.然后她想花尽可能少的费用烧掉所有的情侣.问最少需要多少费用,并且当费用最少时的方案

分享一组超炫的loading加载动画

<!doctype html><head><meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="css/lanrenzhijia.css"/> <link rel="stylesheet" type="text/css" href="css/l