#include <cstdlib>
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
struct Edge{
int to;
Edge*next;
void insert(Edge* e)
{
e->next = next;
next = e;
}
};
class Graph{
private:
Edge** adj;
int n;
public:
Graph(int s);
~Graph();
void Insert(int i, int j);
void Bfs(int v, int*id, int cid);
void Dfs(int v);
Edge* Remove(int v);
void Insert(Edge* list, int v);
int Components();
bool HasEdge(int v);
};
Graph::Graph(int s)
{
n = s;
adj = (Edge**) malloc(sizeof(Edge*)*n);
for (int i = 0; i < n; i++)
{
adj[i] = (Edge*) malloc(sizeof(Edge));
adj[i]->next = NULL;
}
}
Graph::~Graph()
{
for (int v = 0; v<n; v++)
{
Edge* e = adj[v]->next;
while (e)
{
adj[v]->next = e->next;
free(e);
e = adj[v]->next;
}
}
free(adj);
}
void Graph::Insert(int i, int j)
{
Edge* ei = (Edge*) malloc(sizeof(Edge));
Edge* ej = (Edge*) malloc(sizeof(Edge));
ei->to = i; ej->to = j;
adj[i]->insert(ej);
adj[j]->insert(ei);
}
//Remove all edges attaches to v
Edge* Graph::Remove(int v)
{
for (Edge* e = adj[v]->next; e; e=e->next)
{
int w = e->to;
for(Edge*p = adj[w], *eg=p->next; eg; )
{
if (eg->to == v)
{
p->next = eg->next;
free(eg);
eg = p->next;
break;
}
else
{
p = eg; eg = eg->next;
}
}
}
Edge *list = adj[v]->next;
adj[v]->next = NULL;
return list;
}
void Graph::Insert(Edge* list, int v)
{
adj[v]->next = list;
for (Edge* e = list; e; e = e->next)
{
int w = e->to;
Edge* ee = (Edge*) malloc(sizeof(Edge));
ee->to = v;
adj[w]->insert(ee);
}
}
bool Graph::HasEdge(int v)
{
return adj[v]->next && adj[v]->next->next;
}
void Graph::Bfs(int v, int*id, int cid)
{
queue<int> Q;
Q.push(v);
id[v] = cid;
while (!Q.empty())
{
v = Q.front();Q.pop();
Edge* e = adj[v]->next;
while (e)
{
int w = e->to;
if (!id[w]){
Q.push(w);
id[w] = cid;
}
e = e->next;
}
}
}
void Graph::Dfs(int v)
{
int cnt = 2;
int* id = (int*)malloc(sizeof(int)*n);
memset(id, 0, sizeof(int)*n);
id[v] = 1;
stack<Edge*> S;
S.push(adj[v]->next);
while(!S.empty())
{
Edge* e = S.top(); S.pop();
int w = e->to;
if (e->next) S.push(e->next);
if (id[w] == 0){
id[w] = cnt++;
if (adj[w]->next) S.push(adj[w]->next);
}
}
}
int Graph::Components()
{
int* id = (int*) malloc(sizeof(int)*n);
memset(id, 0, sizeof(int)*n);
int cid = 1;
for (int v = 0; v < n; v++)
{
if (id[v]==0){ Bfs(v, id, cid); cid++; }
}
free(id);
return cid-1;
}
int main(int argc, char *argv[])
{
int t=1;
while(1)
{
Graph g(1001);
int v, w;
int a = 0;
while(scanf("%d", &v), v)
{
scanf("%d", &w);
a++;
g.Insert(v, w);
}
if (a==0) break;
if (t > 1) printf("/n");
printf("Network #%d/n", t++);
int cmp = g.Components(), com;
int cnt = 0;
for (int i = 1; i < 1001; i++)
{
if (!g.HasEdge(i)) continue;
Edge* list = g.Remove(i);
com = g.Components();
if (com > cmp+1)
{
cnt++;
printf(" SPF node %d leaves %d subnets/n", i, com-cmp);
}
g.Insert(list, i);
}
if (cnt == 0) printf(" No SPF nodes/n");
}
}
相关推荐
AI开发提效10倍:从需求到部署的全流程实战指南(附Prompt模板)
用AI开发不是“偷懒”,而是把时间花在更有价值的地方——原来花80%时间写重复代码,现在用AI搞定后,能把精力放在“优化用户体验”“提升系统性能”这些核心工作上,这才是AI给开发者的真正红利。如果你还没开始用AI做开发,建议从“写一个简单接口”“补一段注释”开始尝试,先用起来再优化方法。记住:AI是工具,不是对手,学会驾驭它,你会发现开发效率提升的同时,还能告别无效加班。
SPF ZOJ - 1119
Background Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes on a peer-to-peer basis, a failure of a single node, 3, in the ne...
扫地机器人解决方案:工作原理与硬件构成
房间里柜子,鞋子,床,座椅,人都在什么地方?3、数字信号处理器。这主要是为控制芯片进行路径规划后,下发指令给执行的电机,包括舵轮(扫地机人前进,转向的轮子),扫地刷的电机,吸尘器的电机,让这些电机工作。扫地机器人的大脑主要用来规划路径,避障,以及人机交互,例如:人类设定打扫范围,以及语音指导扫地机器人进行打扫,都需要处理器进行处理后,将指令下发到执行机构。小脑属于跟执行层最近的控制区域,例如我们上面说的,后面两个处理器:数字信号处理器和微控制器都是对执行层(电机),进行控制和回馈外部信息的处理器。
[cut point] ZOJ 1119 SPF
<br />求割点及其分割的连通图数目<br /> <br />#include<cstdio> #include<vector> #include<memory> using namespace std; const int MaxN = 500; const int root = 1; vector<int>v[MaxN]; int a[MaxN]; int D[MaxN]; int cut[MaxN]; int c[MaxN]; void dfs(int k, int
别再乱设阻尼了!Abaqus动力分析中瑞利阻尼的α和β到底怎么算?
本文深入解析Abaqus动力分析中瑞利阻尼参数α和β的科学计算方法,帮助工程师准确设置阻尼参数以提升仿真精度。详细介绍了基于模态阻尼比的经典计算方法和多模态优化法,并结合工程案例演示参数设置流程,避免常见的阻尼设置误区。
26、多级快速多极子算法(MLFMA)在大规模电磁问题中的应用
本文探讨了多级快速多极子算法(MLFMA)在大规模电磁问题中的高效应用。通过分层分区策略,MLFMA在分布式内存架构上实现了高效并行化,能够求解包含数亿未知数的复杂电磁问题。文章分析了介质球体、半球透镜、周期性结构和损耗介质阵列等典型案例,验证了MLFMA的高精度与广泛适用性。同时,MLFMA被应用于实际场景如隐身目标Flamme的外部共振分析和含分裂环谐振器的超材料设计,展示了其在航空航天、超材料和生物医学等领域的广阔前景。未来发展方向包括算法优化、多物理场耦合和实时计算,进一步拓展其应用潜力。
ZOJ - 1119 SPF
题目: SPF 题意:给一个网络(实质是一副无向图),每一个节点为一台计算机,输出:哪一台计算机是割点 , 移去它之后网络被分成了几块 思路:无向图求割点套模板,所谓割点(参考): 1.如果点v是DFS序列的根节点,则如果v有一个以上的孩子,则v是一个割点。 2.如果v不是DFS序列根节点,并且点v的任意后继u能追溯到最早的祖先节点low[u]>=dfn[v
手把手教你学Simulink——基于Simulink的多轮PMSM同步驱动交叉耦合控制
摘要:本文针对多轮PMSM同步驱动系统的负载不均、参数差异等问题,提出基于Simulink的交叉耦合控制解决方案。通过实时补偿轮间同步误差,实现同步误差<1%、转矩脉动<5%的性能提升。文章详细介绍了系统架构、核心算法(包括PMSM数学模型和偏差耦合控制算法)、Simulink建模步骤及参数设置,并通过仿真验证了稳态和动态性能。同时提供了工程调试建议和完整代码实现,为多轮驱动系统开发提供实用参考。该方案计算量小,可移植性强,适用于电动汽车、AGV等应用场景。
zoj 1119 SPF
利用并查集做 设某个要计算的点为p 然后对与p连接的那些点做深度搜索,然后在dfs中对他们经行合并操作。 最后判断祖先的数量有多少,若>1,则有几个祖先就说明有几个不一样的子集,也就是不能互相访问的子网。 #include<iostream> #include<cstring> #include<algorithm> #include<math.h> #include<vector> #include<set> #include&
QGis二次开发 —— 1、win10/win11搭建Vs2017-QGis3.40.12环境(附Vs2017环境效果,附全部问题解决方法)(附:Qt助手加入QGis接口说明文档)
QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGisA接口说明文档)
微信小程序 - error_msg:net::ERR_CONNECTION_RESET“(“errno“:600001,“errMsg“:“uploadFile:fail errcode:-101)
"errno":600001,"errMsg":"uploadFile:fail errcode:-101 cronet_error_code:-101 error_msg:net::ERR_CONNECTION_RESET"微信小程序,微信小程序wx.uploadFile报错,uniapp微信小程序uni.uploadFile上传文件报错,微信小程序调用wx.uploadFile返回错误ERR_CONNECTION_RESET,如何解决这个问题,上传图片出现报错,小程序上传视频报错,上传文件出现报错,如何
zoj 1119 /poj 1523 SPF
题目描述:考虑图8.9中的两个网络,假定网络中的数据只在有线路直接连接的2个结点之间以点对点的方式传输。一个结点出现故障,比如图(a)所示的网络中结点3出现故障,将会阻止其他某些结点之间的通信。结点1和结点2仍然是连通的,结点4和结点5也是连通的,但这2对结点之间 的通信无法进行了。因此结点3是这个网络的一个SPF结点。严格的定义:对于一个连通的网络,如果一个结点出现故障,将会阻止至少一对结点...
五步教你用GPT-5画出国自然技术路线图!轻松节省80%画图时间(附AI提示词)
七哥给大家推荐的高校都在用的AI平台——高级学术版专业应用平台,集成了ChatGPT、Claude、Gemini、Grok等Al大模型的PLUS版本平台,包括 ChatGPT-5、4o、o3、4.1、4.5、Gemini 2.5 Pro、Claude 3.7、Claude 4、DeepSeek 满血版、Grok 3 、Grok 4等原生线路,还有国际主流的GPTs学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。
ZOJ 1119 SPF(割点)
SPF Time Limit: 2 Seconds Memory Limit: 65536 KB Background Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
ZOJ 1119 SPF
Tarjan算法求解割点 #include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; const int maxn=1111;//有多少个结点 vector&...
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
zoj 1119 SPF 无向图割点
题目大意:找出一个网络中的spf点,即割点,并输出将某spf点删除后会将原网络分割成几个连通的子网络。 即求割点,用tarjan算法。 #include <stdio.h> #include <string.h> int min(int a,int b) { if(a<b) return a; else return b; ...
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
poj 1523 | zoj 1119 SPF
类型:图的割点 题目:http://poj.org/problem?id=1523 来源:Greater New York 2000 思路:构图,通过dfs【Tarjan算法】记录各个顶点的深度优先数,在回退的过程中记录low数组,如果孩子节点low值大于等于父节点step值,记录分割的联通分量的个数 !!!输出格式 // poj 1523 SPF // ac 1164K 16MS
ZOJ1119(SPF)
题目链接:传送门 题目大意:一副无向图,问有多少个节点满足删除该节点后图不连通,对于每个满足条件的节点,输出节点编号及删除节点将图分为几个连通块。若没有节点满足则输出No SPF nodes 题目思路:tarjan算法求关节点入门题(也可用矩阵存图) 1 #include <iostream> 2 #include <cstdio> 3 #incl...
POJ 1523、ZOJ 1119 SPF - from lanshui_Yang
Description Consider the two networks shown below. Assuming that data moves around these networks only between directly connected nodes on a peer-to-peer basis, a failure of a single node, 3, in th
ZOJ 1119 SPF(tarjan求割点)
关于割点的内容参考这篇文章:http://www.byvoid.com/en/blog/biconnect/ /* 1、若深度优先生成树的根有两棵或两棵以上的子树,则此根顶点必定为关节点。*/ /* 2、若生成树中某个非叶子顶点v,其孩子结点均没有指向 v 的祖先的回边,则 v 为关节点。*/ #include #include #include #include
ZOJ1119&&POJ1523-SPF(求割点)
SPF Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8584 Accepted: 3916 Description Consider the two networks shown below. Assuming that data moves aroun
ZOJ -- 1119 SPF(双连通求割点)
题目大意:输出图中的割点,并输出把割点删掉后图会变为几部分; 思路分析:只要判断每个割点分别在几个双连通分量中就好; 代码实现: #include #include #include #include #include #include #include #include //#pragma comment(linker, "/STACK:102400000,102400000") #def
zoj 1119 SPF (tarjan求割点的联通分量数)
题目地址 题目大意:给出多组边的关系,求图中割点的联通分量数 解题思路:tarjan求割点裸题,再加一个数组用来记录每个割点的联通分量数 #include #include #include #include #include #include #include #include #include #include using namespace std; const
Zoj 1119 POJ 1523 SPF 求关节点及删除关节点会出现多少个连通分量 Tarjan算法
有最朴素的想法就是依次删除每个点,看剩下的图有多少个连通分量,如果只有一个,不是关节点(也叫割点),否则是关节点。 这种算法的复杂度是O(n^3). 这里的Tarjan算法的复杂度只有O(n^2),在连通图中只做一次DFS,根据DFS时遍历结点的先后顺序,依次给每个结点编号,这个编号叫该点的深度值,存在数组dfn[]中 求每个点的low[]值,low值是这样求的,每个点的low值最初就是该点...
ZOJ1119(割点)
/* * this code is made by LinMeiChen * Problem: * Type of Problem: * Thinking: * Feeling: */ #include #include #include #include #include #include #include #include #include #include using namespace s
Zoj 1119
#include #include using namespace std; #define min(a, b) (a < b ? a : b) int Edge[1001][1001]; int visited[1001]; int low[1001]; int dfn[1001]; int nodes; int tmpdfn; int subnets[1001]; int sons;
1528



被折叠的 条评论
为什么被折叠?



