题解报告:https://www.luogu.org/problemnew/show/P2341

我们把图中的强连通分量缩点,然后只有出度为0的牛是受欢迎的,这样如果出度为0的牛只有一个,说明受所有牛欢迎。否则出度为0只是受一些牛欢迎。

#include <stack>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 10;
struct edge{
int next, to, from, len;
}e[maxn<<2];
int head[maxn], cnt;
int n, m, color[maxn], tong[maxn], du[maxn], num, tim, ans, tmp;
int dfn[maxn], low[maxn];
bool vis[maxn];
stack<int> s;
void add(int u, int v)
{
e[++cnt].from = u;
e[cnt].to = v;
e[cnt].next = head[u];
head[u] = cnt;
}
void tarjan(int x)
{
dfn[x] = low[x] = ++tim;
s.push(x); vis[x] = 1;
for(int i = head[x]; i != -1; i = e[i].next)
{
int v = e[i].to;
if(!dfn[v])
{
tarjan(v);
low[x] = min(low[x], low[v]);
}
else if(vis[v])
{
low[x] = min(low[x], low[v]);
}
}
if(dfn[x] == low[x])
{
color[x] = ++num;
vis[x] = 0;
while(s.top() != x)
{
color[s.top()] = num;
vis[s.top()] = 0;
s.pop();
}
s.pop();
}
}
int main()
{
memset(head, -1, sizeof(head));
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; i++)
{
int u, v;
scanf("%d%d",&u,&v);
add(u,v);
}
for(int i = 1; i <= n; i++)
if(!dfn[i]) tarjan(i);
for(int i = 1; i <= n; i++)
{
for(int j = head[i]; j != -1; j = e[j].next)
{
int v = e[j].to;
if(color[v] != color[i])
{
du[color[i]]++;
}
}
tong[color[i]]++;
}
for(int i = 1; i <= num; i++)
{
if(du[i] == 0)
{
tmp++;
ans = tong[i];
}
}
if(tmp == 0)
{
printf("0");
return 0;
}
if(tmp == 1)
{
printf("%d",ans);
return 0;
}
if(tmp > 1)
{
printf("0");
return 0;
}
}

最新文章

  1. 装X代码
  2. 通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击
  3. Unity3D连接sqlite数据库操作C#版
  4. Atitit 桌面软件跨平台gui解决方案 javafx webview
  5. CSS总结 最后的选择符和字体、元素常见样式
  6. MXS 编辑器外观
  7. JS之tagNaem和nodeName
  8. Mes首检确认统计的存储过程
  9. RMAN数据库恢复之恢复表空间和数据文件
  10. Git学习01 --git add, git commit , git log ,git status, git reset --hard, head
  11. FOJ 1591 —— Coral的烦恼
  12. PDO进行sql报表编制结果集介绍及操作(两)
  13. [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
  14. 海量并发的无锁编程 (lock free programming)
  15. MySQL 数据库 Query 的优化
  16. Python-类的封装
  17. 安装openssl
  18. luogu P4314 CPU监控
  19. nginx给server增加日志配置
  20. win server 2003 x64 IIS配置

热门文章

  1. adb调试安卓
  2. 关于Json字符串&quot;反序列化Error reading JObject from JsonReader. Current JsonReader item is not an object: StartArray. Path...&quot;
  3. JS代码格式化排版工具,web文本编辑器
  4. 九度oj题目1165:字符串匹配
  5. Understanding Java 8 Streams API---reference
  6. js中的break,continue,return
  7. Problem E: 积木积水 ——————【模拟】
  8. spring mvc 外键允许Null
  9. 引用SQLHelper类configurationmanager 不存在
  10. 封装http请求键值对的js函数