YBTOJ通讯问题(强连通分量)

2023-05-16

YBTOJ通讯问题(强连通分量)

在这里插入图片描述
思路:
在这里插入图片描述

以上纯属水博客
有强连通分量这个算法提示,思路应该不难想
但是有一个小细节
我们枚举入边的时候要缩点之后反向建图,然后枚举出边
我没建反图调了一辈子
AC代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e4+5,maxm=1e5+5;
int n,m,bcnt,ecnt,tmp,cnt,st[maxn],top,head[maxn],head1[maxn],dfn[maxn],ans;
int low[maxn],c[maxn],out[maxn];
bool v[maxn];
struct edge
{
	int from,to,nxt,w;
}e[maxm],b[maxm];
void add(int x,int y,int z)
{
	b[++bcnt]=(edge){x,y,head[x],z};
	head[x]=bcnt;
}
void add1(int x,int y,int z)
{
//	printf("u:%d v:%d w:%d\n",x-1,y-1,z);
	e[++ecnt]=(edge){x,y,head1[x],z};
	head1[x]=ecnt;	
}
void tarjan(int x)
{
	dfn[x]=low[x]=++cnt;v[x]=1;
	st[++top]=x;
	for(int i=head[x];i;i=b[i].nxt)
	{
		int y=b[i].to;
		if(!dfn[y])
		{
			tarjan(y);
			low[x]=min(low[x],low[y]);	
		}
		else if(v[y]) low[x]=min(low[x],dfn[y]);
	} 
	if(dfn[x]==low[x])
	{
		tmp++;
		do
		{
			c[st[top]]=tmp;
			v[st[top]]=0;
			top--;
		}while(x!=st[top+1]);
	}
}
void clear()
{
	memset(st,0,sizeof(st));
	memset(head,0,sizeof(head));
	memset(head1,0,sizeof(head1));
	memset(dfn,0,sizeof(dfn));
	memset(c,0,sizeof(c));
	memset(v,0,sizeof(v));
	memset(low,0,sizeof(low));
	ecnt=0;bcnt=0;tmp=0;cnt=0;top=0;ans=0; 
}
void work()
{
	for(int u=1;u<=tmp;u++)
	{
		int flag=0;
		if(!out[u]) continue;
		int minn=0x7fffffff;
//		cout<<head1[u]<<endl;
		for(int i=head1[u];i;i=e[i].nxt) minn=min(minn,e[i].w),flag=1;
//		cout<<out[u]<<" "<<flag<<" "<<minn<<endl;
		if(flag) ans+=minn;
	}
}
signed main()
{
	while(1)
	{
		scanf("%lld%lld",&n,&m);
		if(n==0&&m==0) break;
		clear();
		for(int i=1;i<=m;i++)
		{
			int x,y,z;
			scanf("%lld%lld%lld",&x,&y,&z);
			add(x+1,y+1,z);
		}
		for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
//		for(int i=1;i<=n;i++) cout<<c[i]<<" ";
//		cout<<endl;
		for(int i=1;i<=bcnt;i++)
		{
			int x=b[i].from,y=b[i].to,z=b[i].w;
			if(c[x]!=c[y]) add1(c[y],c[x],z),out[c[y]]++;
		}
//		cout<<tmp<<endl;
//		for(int i=1;i<=n;i++) cout<<out[i]<<" ";
//		cout<<endl;
		work();
		printf("%lld\n",ans);
	}
	return 0;
}
/*
7 6
0 1 22622
0 2 60946
2 3 12288
2 4 60583
0 5 22206
2 6 65358

244003
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YBTOJ通讯问题(强连通分量) 的相关文章

  • 学完python可以从事哪些行业?

    前言 1 web开发 对于一些网站的开发 xff0c 诸如后台管理系统 xff0c 或者一些微服务 xff0c 写一些接口 xff0c 都可以使用 Python 实现 Python有很多优秀的Web开发框架 xff0c 如Flask Dja
  • 0基础学Python爬虫2个月怎么赚钱?了解一下

    前言 Python是一门编程语言 xff0c 一门技术 xff0c 一个生产力工具 只要你能掌握生产工具 xff0c 就能赚钱 xff0c 也许能像那位知乎大神一样躺赚200万 xff0c 即便不能 xff0c 至少赚个外快是没有问题的 x
  • 年薪30w+,为啥大数据工程师才是真正的高富帅?

    前言 大家有没有过这样的经历 xff1a 朋友圈推送的广告越来越频繁 xff0c 恰恰还是前几天想买的 xff1f 在某宝搜了款键盘 xff0c 结果往后很多天一直精准推送键盘 xff0c 还一个比一个贵 刷视频手滑点赞美食视频 xff0c
  • 这才是最适合新手的python基础教程,640页超详细

    前言 python入门虽然简单 xff0c 很多新手依然卡在基础安装阶段 xff0c 大部分教程对一些基础内容都是一带而过 xff0c 好多新手朋友 xff0c 对一些基础知识常常一知半解 xff0c 需要在网上查询很久 扎实的基础知识 x
  • python数据预测——学习数据分析需要多少python基础?

    前言 工欲善其事 必先利其器 xff0c 搭建Python环境 学习Python语言 理解数据分析工作是入行Python数据分析最基本的三要素 但是还要有个最重要的前提是经验和思维 这个过程就好比做日料 xff0c 首先要有厨具 xff0c
  • python副业介绍以及渠道推荐,接单注意事项

    这是本文的目录 前言Python为什么会大受欢迎python副业有哪些1 兼职处理数据2 兼职查询资料3 兼职P图4 爬虫类5 平台接单 Python赚外快的一些其它方式1 xff09 自媒体也是个风口2 xff09 知识付费分享3 xff
  • python的未来前景,超详细根据好多资料总结出来的

    这是本文的目录 前言一 Python语言广泛二 Python发展前景二 Python选择方向四 Python就业情况五 薪资待遇好零基础Python学习资源介绍 x1f449 Python学习路线汇总 x1f448 x1f449 Pytho
  • 如何将python程序打包成apk?

    前言 如果想使用 Python 语言编写图形界面程序 xff0c 那么有不少的框架可以提供支持 xff0c 比如 Tkinter Qt for Python WxPython等等 不过 这些框架都是只能创建桌面图形界面程序 xff0c 比如
  • 容联云短信python接口单例封装

    容联云短信python接口单例封装 安装pip3 install ronglian sms sdk 注意 xff1a 免费开发测试使用的模板ID为1 xff0c 具体内容 xff1a 云通讯 您的验证码是 1 xff0c 请于 2 分钟内正
  • mac 更新终端命令行显示信息

    mac下自定义终端显示内容 xff0c 如自定义 xff0c 显示名称 xff0c 隐藏计算机名 xff0c 用户名 1 编辑 etc bashrc xff0c 使用如下命令 sudo vi etc bashrc 2 打开文件后 xff0c
  • React Fragment 用途说明-节点片段,不创建额外DOM

    一 React 节点片段解决的问题 由于React 组件只能有一个根标签 xff0c 例如以下片段无效 xff1a ReactDOM render lt div gt Row1 lt div gt lt div gt Row2 lt div
  • 分布式延迟消息队列asynq

    asynq分布式延迟消息队列源码分析 设计思路 延迟队列设计思路 xff1a zset的分值为时间消息有状态 xff1a 活跃 xff0c 计划中 xff0c 重试 xff0c 已完成等 xff0c 状态迁移使用list xff0c 如果状
  • jmeter设置为中文的两种方法

    jmeter默认是英语环境 xff0c 但是可以通过设置来显示为中文 方法一 xff1a 在jmeter面板上选择Options gt Choose Language gt Chinese 但是这种方法设置的只能在当前界面生效 xff0c
  • requests常用方法 之 post请求

    post方法 xff1a 作用 xff1a 提交资源 新增资源 步骤 xff1a 1 导包 xff1a import requests 2 参数 3 调用post方法 xff1a r 61 requests post url json da
  • postman全局变量设置

    postman全局变量的设置 xff1a 设置的全局变量可以供postman所有的工程使用 xff0c 即所有接口都可以调用全局变量 示例1 xff1a 对手机号码归属地查询的手机号码设置为全局变量 xff0c 并调用 步骤1 点击Envi
  • postman使用(读取)json文件做批量测试

    postman json文件参数化 xff1a 步骤 xff1a 1 准备json文件 xff1b 2 接口中引用变量 xff1b 3 测试集中导入数据文件 xff1b 4 点击 Run用户 xff0c 进行运行 xff1b 5 查看运行结
  • selenium 八种定位元素的方式

    八种定位方式 xff1a id xff0c name xff0c class name xff0c tag name xff0c link text xff0c partial link text xff0c xpath xff0c css
  • selenium之滑块操作

    滑块作为安全验证机制的一种 xff0c 经常在登录或者注册时涉及 但是在自动化测试时 xff0c 需要想办法用代码的方式来处理滑块 selenium中对滑块的操作基本是采用元素拖曳的方式 xff0c 而这种方式需要用到selenium的Ac
  • HTML + CSS 实现猫眼电影静态页面

    HTML 43 CSS 实现猫眼电影静态页面 效果图 xff1a HTML代码 xff1a span class token doctype span class token punctuation lt span span class t
  • HTML + CSS 实现豆瓣首页

    HTML 43 CSS 实现豆瓣首页 效果图 xff1a 整个首页效果图 xff1a 部分 HTML代码 xff1a span class token doctype span class token punctuation lt span

随机推荐