SCC::poj2186 Popupar Cows && poj2553 The Bottom of A Graph

Game Theory: 公平博弈 Notes: The following excerpt is from a book 《GAME THEORY》by Thomas && S.Ferguson and a paper by Ulyssess. 一. 公平聯合博弈 公平聯合博弈(Impartial combi 阅读详情
 

关于SCC的知识与算法,参见《SCC》一文。这两道题本质是一样的,细微的区别只在于输出而已。夜鱼只给我做前一道题,大概是看到我做的《图算法》的小结里面没有SCC的地位,想给我提个醒。后来我在那篇小结里面补上了SCC,顺便也对SCC的知识梳理了一遍,觉得手痒,网上查了一下还有poj2553也是关于SCC的,但没想到poj2553一题是赤裸裸的SCC,但这道题我却WA了几次,原因是在输出的时候没有“按序”!

 1. poj2186"Popupar Cows"

题目大意:一次调查结果(A,B)表示牛A认为B受欢迎,这种关系具有传递性。有N(1~10000)头牛牛,做了M(0~50000)次调查。求被所有其他牛牛欢迎的牛的头数。

分析:画了图就知道,其实就是求最大连通分量图G^{SCC},然后求该图每个“点”的出度,若出度为零的个数大于1,则无解,否则输出出度为零的“点”的内容。求SCC的时候选用的是tarjan算法。

#include "stdafx.h"       //Memory:1816k    Time:454ms
#include <iostream>
using namespace std;
#define MaxN 10010
#define MaxE 50010
//========================模板开始=====================================
typedef struct node{
	int data;
	struct node *next;
}SLink;
SLink to[MaxE];
int dfu[MaxN],low[MaxN]; //dfu[i]为节点i搜索的次序编号,low[i]为i或i的子树能够追溯到的最早的栈中节点的次序编号
int order[MaxN],SCC[MaxN]; //order记录遍历次序,SCC[i]记录i所属的SCC
int count[MaxN];        //记录每个SCC的出度
bool ifstack[MaxN];         //相当于栈的作用
int dex=0,st=0,cnt=0;
int N,M;

void tarjan(int i){
	dfu[i]=low[i]=++dex;
	ifstack[i]=1;     //i入栈
	order[++st]=i;   //记录遍历顺序
	int j;
	for(SLink *e=&to[i];e;e=e->next){      //这个for为DFS
		j=e->data;
		if(!dfu[j]){
			tarjan(j);
			if(low[j]<low[i])
				low[i]=low[j];
		}
		else if(ifstack[j] && dfu[j]<low[i])
			low[i]=dfu[j];
	}
	if(dfu[i]==low[i]){  //当dfu(i)=low(i)时,以i为根的搜索子树上所有节点是一个强连通分量。
		cnt++;
		do{
			j=order[st--];
			ifstack[j]=0;
			SCC[j]=cnt;
		}while(j!=i);
	}
}

int _tmain(int argc, _TCHAR* argv[])
{
	cin>>N>>M;
	for(int i=1;i<=N;i++){
		to[i].data=i;
		to[i].next=NULL;
	}
	int temp1,temp2;
	for(int i=1;i<=M;i++){
		cin>>temp1>>temp2;
		SLink *p=new SLink;
		p->data=temp2;
		p->next=to[temp1].next;
		to[temp1].next=p;
	}

	memset(dfu,0,sizeof(dfu));
	for(int i=1;i<=N;i++){
		if(!dfu[i])
			tarjan(i);
	}

	memset(count,0,sizeof(count));
	for(int i=1;i<=N;i++){
		for(SLink *e=&to[i];e;e=e->next){
			if(SCC[i]!=SCC[e->data])
				count[SCC[i]]++;
		}
	}
//=========================模板结束======================================
	int cow=0,k=1;
	for(int i=1;i<=cnt;i++){
		if(count[i]==0){         
			cow++;k=i;
		}
	}
	
	if(cow!=1) cout<<0<<endl;
	else{
		int num=0;
		for(int i=1;i<=N;i++){
			if(SCC[i]==k)
				num++;
		}
		cout<<num<<endl;
	}

	return 0;
}

2. poj2553"The Bottom of A Graph"

赤裸裸的一道题,出题者大概是知道现在的文化潮流:快餐!连衣服都不穿。

借用poj2186的代码,其中“//======模板开始====……//=====模板结束=====”部分的代码一字不改,只是改写输出部分。一开始WA几次,觉得没道理,后来测了数据【10 1 1 5】就发现问题了,用了一个hash表排了下序,比较ugly地AC了。

…… ……                 // M:2396K        T:375MS
while((cin>>N) && N && (cin>>M)){
	dex=st=cnt=0;
…… ……
	int pri[MaxN]={0};
	for(int i=1;i<=cnt;i++){
		if(count[i]==0){
			for(int k=1;k<=N;k++){
				if(SCC[k]==i){
					pri[k]=1;
				}
			}
		}
	}
	for(int k=1;k<=N;k++){
		if(pri[k]==1){
			cout<<k<<" ";
		}
	}
	cout<<endl;
}


3. 总结:

这些题目,模板性太强了,主体的算法一经写出来,剩下的就是一下细节上的处理了。相对与poj1112"team them up"来说,这两题很简单,poj1112的复杂之处在于求完SCC之后还要DP一下,甚为拐弯抹角。

 

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

相关推荐

从零搭建私有AI工作站:Ollama+DeepSeek+Dify本地化部署全攻略

本文提供了一份详尽的本地化AI工作站搭建指南,核心在于实现数据安全与离线可用。通过整合Ollama、DeepSeek与Dify三大工具,手把手教你完成从环境配置、模型部署到可视化应用构建的全过程,重点解决了Dify连接Ollama等关键步骤,助你打造一个完全自主可控的私有AI开发环境。

weixin_28396629的博客 311

图算法

1. 图的基本概念 2. 图的存储结构 (1)邻接矩阵 一般来说,邻接矩阵所占空间与边数无关(不考虑压缩存储),适合于存储稠密图。为了反映一个图的全面信息,通常采用以下类型定义: #define MAXVEX 100 typedef char VertexType;

我以我心照人 1883

银行数据仓库体系实践(3)--数据架构

狭义的数据仓库数据架构用来特指数据分布,广义的数据仓库数据架构还包括数据模型、数据标准和数据治理。即包含相对静态部分如元数据、业务对象数据模型、主数据、共享数据,也包含相对动态部分如数据流转、ETL、整合、访问应用和数据全生命周期管控治理。 数据架构层面通过数据分类、分层部署等手段,从非功能性视角将数据合理布局。通过整体架构管控和设计,支持业务操作类和管理分析类应用(系统),满足业...

acumen_leo的博客 7011

貪心::poj1328 radar installation && poj2109 Power of Cryptography && poj2586 Y2K Accounting Bug

貪心,就是步步為贏。 這是ACM知識表里基礎算法中的貪心部分,屬於水題範疇。 1. poj1328 radar installation 題目:照抄了。 Assume the coasting is an infinite straight line. Land is

我以我心照人 1356

ROS2学习笔记(二)-- 多机通讯原理简介及配置方法

简单介绍ROS2多机通信原理以及配置注意事项

aibingjin的博客 1万+

特征模理论指导滤波天线设计的优势和方法

本文探讨了特征模理论在滤波天线设计中的应用优势和方法。特征模理论通过分析天线结构的本征模特性,突破了传统经验设计的局限,实现了辐射与滤波功能的一体化设计。文章重点阐述了如何利用模式显著性(MS)和模式加权系数(MWC)来指导辐射零点的产生,揭示了辐射零点形成的物理机制。通过特征模分析,设计师可以明确调控天线结构和馈电系统,优化滤波性能。这种方法为现代多频/宽带滤波天线设计提供了理论依据和实用工具,显著提升了设计效率和性能指标。

qq_64207806的博客 957

时间代价分析

(1)主方法,对于具有递归式的方程很有用,其原理是递归树的计算。但此方法不是万能的。比如递归式T(n)=5T(n/5)+n/lgn,就得老老实实地用递归树去计算了。  (2)待续

我以我心照人 1259

ADS新手必看:ICCAP数据导入与导出CSV的完整流程(附常见问题解决)

本文为ADS新手详细讲解了如何将ICCAP测试数据导入ADS进行仿真分析,并导出为通用CSV格式的完整流程。内容涵盖文件格式解析、导入设置、数据验证、处理技巧及常见问题排查,重点解决了数据文件导入过程中的兼容性与单位映射等核心难点,帮助射频工程师高效连接测量与仿真环节。

peace的博客 557

DFS.枚舉::poj1753 flip game && poj2965 the Pilots Brothers'refrigerator

枚舉,對於狀態或者搜索空間很少的情況可以用,是一種笨重的聰明方法!! 但有時候可以更深入地挖掘題目,得到更好的算法,例如poj2965 1.poj1753 flip game 題目:一个4*4的棋盤放滿棋子,每個棋子不是白色就是黑色。每次选择任意一个棋子翻轉变成相反的颜色

我以我心照人 1014

YOLO26涨点改进 | 损失函数改进篇 | 引入SlideLoss,适配尺度变化+遮挡+难易样本不平衡,手把手配置+实战案例

COCO-Hard是COCO数据集的复杂场景子集,包含80个类别,重点筛选多尺度、遮挡密集样本,其中小尺度目标(<32×32像素)占比42%,大尺度目标(>128×128像素)占比28%,遮挡目标占比57%,场景涵盖人群密集、车流拥堵、复杂工业环境,完美模拟真实复杂检测场景,适合验证SlideLoss的适配性。

qq_36130719的博客 157

华为嵌入式面试题及参考答案(持续更新)

异步是指在程序执行过程中,某些任务不需要等待立即完成就可以继续执行其他任务的过程。在计算机编程中,异步通常用于处理长时间运行的操作,如文件读写、网络通信等,以避免阻塞主线程。异步处理通常涉及到回调函数、事件循环、协程或未来的概念。使用宏定义来避免命名冲突。#else#endif堆和栈是计算机程序中用于存储数据的两种不同类型的内存区域。

大模型大数据攻城狮的专栏 2483

SCC

注:大部分参见百度百科。 在有向图G中,如果两个顶点vi,vj间有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,

我以我心照人 932

在Open3D中从网格中采样点云

在本文中,我们将学习如何使用Open3D从网格中采样点云。点云采样是点云处理的重要步骤之一,能够为后续的任务提供必要的输入。通过这些示例代码,我们可以很容易地使用Open3D库从网格模型中采样点云。值得注意的是,根据实际应用需求,我们可以调整采样点的数量和采样方法来满足不同的场景需求。除了使用Poisson Disk算法,Open3D还提供了其他的点云采样方法,如Uniform采样和Random采样。这个函数使用了Poisson Disk采样算法,可以在保持点云均匀性的同时,尽可能避免重叠点的生成。

FxRuby的博客 413

單調隊列::poj2823 Sliding Window

题目: 一个长度为 N 的数组,一个长为 K 的滑动窗体从最左移至最右端, 你只能见到窗口的K个数,每次窗体向右移动一位,如下表: 要找出窗口在各位置时的 max value,min value Window position Min va

我以我心照人 738

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

DP/單調隊列::poj3250 Bad Hair Day

题目: Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ

我以我心照人 637

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

OS學習小結

《現代操作系統1~6》總結 Lyle 2011-8-25 一.       操作系統概論         一般計算機系統包含硬件、系統程序和應用程序三個部分。粗略地講,系統程序中最重要的操作系統,它夾在硬件和應用程序之間,其任務就是有效地管理計算機各種資源,使得使用計算機

我以我心照人 607

DP::poj1159 Palindrome

被1112卡了一个多星期,虽然思路很清晰了,各部分的独立跟踪测试也没什么问题,但,就是AC不了!无奈,只好先放着。     今天下午夜鱼又给我布置了一道题目,回文字符,挺有意思的,看完题目我就接着看村上的《当我跑步时 我谈些什么》,还美美地睡了半个小时。这些天实在缺午觉啊!醒来

我以我心照人 580

DP::Poj1050 To the max

题目:给定一个N*N方阵,元素为整数,求连续子阵全部元素和的最大值。   一开始我想直接在二维上解决问题,在构造递归方程的时候令max[k](k=i+j)为大小i*j的子阵的子阵和的最大值,然而下面的例子说明了没有最优子结构 0 -2 -7 0 9 2 -6 2 -4

我以我心照人 548

DP::Poj1015 July Compromise

初学DP,夜鱼就给我找了这么条难缠的“大鱼”,有点打击到我~~~~  问题:n個候選人,要挑m個組成陪審團。選人方法:控方和辯方根據喜歡程度為每個候選人打分(0~20),選出的這m個人,必須滿足辯方總分和控方總分的差的絕對值最小。如有多種方案,則選辯控雙方總分之和最大的方案即可

我以我心照人 454

DP::Poj1088 滑雪

这题不难,状态转移方程很快就写出来 m[i, j]=max{m[i-1, j](下)+1,m[i, j-1](左)+1,m[i+1, j](上)+1,m[i, j+1](右)+1}(若下左上右对应元素比s[i, j]小,则对应的m[ ]就可以出现在方程中) 具体实现的话也很简单

我以我心照人 432

DP.單調隊列::poj1631 Bridging signals

题目大意:两岸的同等数目的信号灯一一对应,连线,从中找出最多的线出来,它们之间互不交叉。只要求输出最大的线条数。   本题不需要画图了,因为画了图会尝试用二维的DP去做,吃力不讨好,既然输入是一维的一个串,而且该串简洁地包含了全部的信息,那么直接DP何乐而不为呢? 通过对例

我以我心照人 408

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 206

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 312

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 571

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20
上一篇: SCC
下一篇: Game Theory: 公平博弈
初四
博客等级 码龄15年 3粉丝 19原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值