博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HAOI2006受欢迎的牛
阅读量:6816 次
发布时间:2019-06-26

本文共 1291 字,大约阅读时间需要 4 分钟。

缩点裸题。

题目链接:

正确板子是 :1.缩点之后无需在意各连通块的大小,只需找出所有连通块都经过的那一个连通块;

       2.最后只需:有且仅有一个点(连通块)出度为0,则输出该点大小;其他情况一律输出0。

       (依据:①有向图缩点之后成为有向无环图;

           ②有向无环图中必有出度为0的点 + 若只有一个出度为0的点,则所有点都可到达该点;

           ③若有向无环图中有多个出度为0的点,则不存在 所有点都可到达的点。)

自己用的深搜找那个所有点都可到达的点,但有谜:为何是>=n?何时重复了?

#include
#include
using namespace std;int n,m,x,y,xnt,nex[10005],rd[10005],cd[10005],dfn[10005],low[10005],sc[10005];int tim,s,in[10005],cnt,col[10005],siz,gs[10005];bool vis[10005],sid[10005][10005],flag[10005];struct Node{ int next,to,from;}edge[50005];void add(int x,int y){ xnt++; edge[xnt].next=nex[x]; edge[xnt].to=y; edge[xnt].from=x; nex[x]=xnt;}void tar(int a){ for(int i=nex[a];i;i=edge[i].next) { int v=edge[i].to; if(!dfn[v]) { dfn[v]=++tim; low[v]=dfn[v]; vis[v]=1; in[++cnt]=v; tar(v); if(low[v]
=n) //由==改为>=则100 // s+=gs[i]; // for(int i=1;i<=siz;i++)//85// if(!cd[i])s+=gs[i]; int uu=0;int kk=0;//100 结论 for(int i=1;i<=siz;i++) if(!cd[i])uu++,kk=i; if(uu==1)printf("%d",gs[kk]); else printf("0");// printf("%d",s); return 0;}

 

转载于:https://www.cnblogs.com/Narh/p/8261689.html

你可能感兴趣的文章
病毒木马防御与分析实战
查看>>
分布式工作流任务调度系统Easy Scheduler正式开源
查看>>
Flutter实战(一)写一个天气查询的APP
查看>>
Python零基础学习笔记(十二)—— 字符串及其常用方法
查看>>
Webpack 和 Gulp 构建伪命令行项目
查看>>
在线面试, 前端, 提纲, 草稿
查看>>
hive_异常_01_ Terminal initialization failed; falling back to unsupported
查看>>
分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器
查看>>
Vue - day1
查看>>
kvm.virsh常用命令篇
查看>>
[Hive]Hive使用指南四 客户端导入数据
查看>>
10.JUC线程高级-线程八锁
查看>>
Apache Flink轻量级异步快照机制源码分析
查看>>
PostgreSQL 11 preview - 分区表 增强 汇总
查看>>
MediaCodec在Android视频硬解码组件的应用
查看>>
用JAVA自己画一张二维码
查看>>
Flutter Engine线程管理与Dart Isolate机制
查看>>
美国泛达公司:下一代数据中心的光缆布线系统
查看>>
以太坊(ethereum)技术开发相关资料
查看>>
Pandas数据排序
查看>>