MZOJ #70 FFF团

Posted mandy-h-y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 
View Code

 

以上是关于MZOJ #70 FFF团的主要内容,如果未能解决你的问题,请参考以下文章

codevs4419 FFF 团卧底的菊花

17984 FFF团的怒火

MZOJ 1063 士兵守卫

MZOJ 1264 Longest

MZOJ 1132 && LuoGu P2014 选课

MZOJ 1127 && LuoGu P2016 战略游戏