强联通分量容易出错的地方

这个题强联通分量容易出错的地方我都出了 我把它记下来。。。

 

#include <iostream>

#include <cstdio>

#include <cstring>

#define clr(x) memset(x, 0, sizeof(x))

using namespace std;

 

const int maxn = 50005;

const int maxm = 50005;

 

struct Edge {

       int to, next;

}e[maxm];

int head[maxn], tot;

void add(int u, int v) {

       e[tot].to = v;

       e[tot].next = head[u];

       head[u] = tot++;

}

int min(int a, int b) {

       return a > b ? b : a;

}

int n, m;

int dfn[maxn], low[maxn], id[maxn], outd[maxn], s[maxn], ins[maxn];

int s_cnt, ans_cnt, cnt;

 

 

void init() {

       clr(head);

       clr(dfn); clr(low); clr(id);clr(outd); clr(ins);

       tot = 1;

       s_cnt = 0;

       ans_cnt = 0;

       cnt = 1;

}

 

void dfs(int u) {

       s[s_cnt++] = u;

       ins[u] = 1;

       for(int i = head[u]; i; i = e[i].next) {

              int v = e[i].to;

              if(!dfn[v]) {

                     dfn[v] = low[v] = cnt++;

                     dfs(v);

                     low[u] = min(low[u], low[v]);

              } else if(ins[v]){

                     low[u] = min(low[u], dfn[v]);

              }

       }

       if(dfn[u] == low[u]) {

              ans_cnt++;

              int x;

              do {

                     x = s[--s_cnt];

                     ins[x] = 0;

                     id[x] = ans_cnt;

              } while(x != u);

       }

}

                    

int main() {

       int x, y;

       while(EOF != scanf("%d %d",&n, &m) ) {

              init();

              for(int i = 1; i <= m; i++) {

                     scanf("%d %d",&x, &y);

                     add(x, y);

              }

              for(int i = 1; i <= n; i++) {

                     if(!dfn[i]) {

                            dfn[i] = low[i] = cnt++;

                            dfs(i);

                     }

              }

              if(ans_cnt == 1) {

                     printf("%d\n", n);

                     continue;

              }

              for(int i = 1; i <= n; i++) {

                     for(int j = head[i]; j; j = e[j].next) {

                            int k = e[j].to;

                            if(id[i] != id[k])

                                   outd[id[i]]++;

                     }

              }

              int flag = 0;

              for(int i = 1; i <= ans_cnt; i++) {

                     if(outd[i] == 0) {

                            if(flag == 0) flag = i;

                            else {

                                   flag = 0;

                                   break;

                            }

                     }

              }

              if(flag == 0) {

                     puts("0");

              } else {

                     int sum = 0;

                     for(int i = 1; i <= n; i++) {

                            if(id[i] == flag) {

                                   sum++;

                            }

                     }

                     printf("%d\n", sum);

              }

       }

       return 0;

}

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值