WOJ 18 动态无向图

一开始我是不会写的,后来点开了题解:

无话可说……那就写吧……然而第一发跑成暴力分,后来加了一个优化:就是在询问里面提到过的边都不用再加了。

然后……然后就过了呀……

其实还有面向数据的编程的骚操作……既然卡过了那也没什么好说了。

以前的巨佬们Orz

Code:

#include <cstdio>
#include <cstring>
using namespace std;const int N = 5005;
const int M = 8e5 + 5;int n, m, qn, tot = 0, head[N], ans = 0;
int pCnt = 0, id[N], idCnt = 0, ufs[N], cnt[N][N];
bool ex[N][N], men[N][N], vis[N];struct Edge {int to, nxt;
} e[M];inline void add(int from, int to) {e[++tot].to = to;e[tot].nxt = head[from];head[from] = tot;
}struct Pathway {int u, v;
} path[M];struct Query {int type, u, v;
} q[M];inline void read(int &X) {X = 0;char ch = 0;int op = 1;for(; ch > '9' || ch < '0'; ch = getchar())if(ch == '-') op = -1;for(; ch >= '0' && ch <= '9'; ch = getchar())X = (X << 3) + (X << 1) + ch - 48;X *= op; 
}inline void init() {for(int i = 1; i <= n; i++) ufs[i] = i;
}int find(int x) {return x == ufs[x] ? x : ufs[x] = find(ufs[x]);
}inline void merge(int x, int y) {int fx = find(x), fy = find(y);if(ufs[fx] != fy) ufs[fx] = fy;
}void dfs(int x) {vis[x] = 1;for(int i = head[x]; i; i = e[i].nxt) {int y = e[i].to;if(!ex[x][y]) continue;if(vis[y]) continue;dfs(y);}
}inline void reCnt() {ans = 0;for(int i = 1; i <= idCnt; i++) vis[i] = 0;for(int i = 1; i <= idCnt; i++)if(!vis[i]) {ans++;dfs(i);}
}inline void addEdge(int p) {int u = id[find(q[p].u)], v = id[find(q[p].v)];cnt[u][v]++, cnt[v][u]++;if(!ex[u][v]) {ex[u][v] = ex[v][u] = 1;add(u, v), add(v, u);}//    reCnt();
} inline void delEdge(int p) {int u = id[find(q[p].u)], v = id[find(q[p].v)];cnt[u][v]--, cnt[v][u]--;if(!cnt[u][v] && !cnt[v][u]) ex[u][v] = ex[v][u] = 0;    //    reCnt();
}inline void query(int p) {reCnt();printf("%d\n", ans);
}int main() {read(n), read(m);for(int i = 1; i <= m; i++) read(path[i].u), read(path[i].v);read(qn);for(int i = 1; i <= qn; i++) {char op[7];scanf("%s", op);if(op[0] == 'l') {q[i].type = 1, read(q[i].u), read(q[i].v);men[q[i].u][q[i].v] = men[q[i].v][q[i].u] = 1;}    if(op[0] == 'c') {q[i].type = 2;read(q[i].u), read(q[i].v);men[q[i].u][q[i].v] = men[q[i].v][q[i].u] = 1;}    if(op[0] == 'q') q[i].type = 3;} init();for(int i = 1; i <= m; i++) {if(men[path[i].u][path[i].v]) continue;merge(path[i].u, path[i].v);}for(int i = 1; i <= n; i++) {int nowf = find(i);if(!vis[nowf]) vis[nowf] = 1, id[nowf] = ++idCnt;}/*    for(int i = 1; i <= n; i++)printf("%d ", id[find(i)]);printf("\n");   */for(int i = 1; i <= m; i++) {if(!men[path[i].u][path[i].v]) continue;int x = id[find(path[i].u)], y = id[find(path[i].v)];add(x, y), add(y, x);ex[x][y] = ex[y][x] = 1;cnt[x][y]++, cnt[y][x]++;}//    reCnt();for(int i = 1; i <= qn; i++) {if(q[i].type == 1) addEdge(i);if(q[i].type == 2) delEdge(i);if(q[i].type == 3) query(i);}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/CzxingcHen/p/9494992.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Snipaste-2.4-Beta-x64.zip下载

Snipaste-2.4-Beta-x64.zip下载 链接&#xff1a;Snipaste-2.4-Beta-x64.zip下载 提取码&#xff1a;s8lo

AI如何帮助我们理解意识——麻省理工最新大脑研究

来源&#xff1a;ScienceAI编辑&#xff1a;文龙麻省理工学院和麻省总医院的一组研究人员最近发表了一项将社会意识与单个神经元活动联系起来的研究。据悉&#xff0c;这是首次在单神经元级别下找到「心智理论」的证据。测量大量的神经元是神经学的基础。即使是普通的核磁共振成…

CodeForces - 1017D The Wu

题面在这里&#xff01; 比较显而易见的暴力&#xff0c;O(2^(2n) 2^n * 100) 就可以直接做了 #include<bits/stdc.h> #define ll long long using namespace std; const int N4105; #define pb push_backinline int getint(){int x0; char chgetchar();for(;!isdigit(c…

typora-setup-x64.exe下载

typora-setup-x64.exe下载 链接&#xff1a;typora-setup-x64.exe下载 提取码&#xff1a;wiu8

【剑指offer】面试题30:包含min函数的栈

定义栈的数据结构&#xff0c;请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中&#xff0c;调用min、push及pop的时间复杂度都是O(1)。 代码&#xff1a; package offer; import java.util.Stack; class MinInStack { Stack<Integer> stack new St…

计算机操作系统——处理机调度算法

计算机操作系统——处理机调度算法 一、处理机调度的层次和调度算法的目标 1.处理及调度的层次 高级调度&#xff1a;&#xff08;周期较长&#xff0c;大约几分钟一次&#xff09; 又称为长程调度或作业调度 调度对象&#xff1a;作业 功能&#xff1a;根据算法决定将外存中…

宇宙即计算~一种新科学:斯蒂芬·沃尔夫勒姆

编辑 &#xff1a;Gemini来源&#xff1a;人机与认知实验室斯蒂芬沃尔夫勒姆这个名字&#xff0c;在中文世界里可能远谈不上家喻户晓&#xff1b;但他的英文名Stephen Wolfram恐怕反而却要熟悉得多。他是Mathematica软件的发明者和首席设计师&#xff0c;被广泛地认为是当今科学…

2018acm-icpc宁夏邀请赛后记

由于要准备期末考试的缘故&#xff0c;时隔一个月之后我才想起来还有一场比赛没有总结。 大概是出去过的最远的地方了&#xff0c;宁夏理工学院离杭州有两千多千米。 不得不说感到了主办方满满的诚意&#xff0c;虽然是第一次办比赛&#xff0c;但是第一天组织的沙湖旅游&#…

【剑指offer】面试题31:栈的压入,弹出序列

输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序&#xff0c;序列4,5,3,2,1是该压栈序列对应的一个弹出序列&#xff0c;但4,3,5,1,2就不可能…

maven安装与项目创建

maven安装与项目创建 Maven是一个软件项目管理和理解工具。基于项目对象模型的概念&#xff0c;Maven可以管理项目的根据一条中心信息构建、报告和记录。 文件 最新的文件可以在https://maven.apache.org/.找到 系统需求 JDK: 1.7或更高版本(这是为了执行Maven -它仍然允许…

windows 安装zip 压缩

* 到sourceforge上下载 zip-3.0-bin.zip https://sourceforge.net/projects/gnuwin32/files/zip/3.0/zip-3.0-bin.zip/download?use_mirrorjaist 或者http://pan.baidu.com 链接: https://pan.baidu.com/s/1HObxhQUdbsl8J-B-IeeRUg 密码: 9922 * 解压 * 把bin目录下面的exe文件…

应对全球粮食危机 AI、5G与机器视觉联手“养鱼”

来源&#xff1a;Forbes编译&#xff1a;科技行者时至今日&#xff0c;全球粮食挑战已经成为现实难题&#xff0c;环境危机的恶化又进一步加剧了这个挑战。而在这样一波重压之下&#xff0c;人工智能、机器视觉与5G网络等新兴技术能否指明新的解决方案?挪威鲑鱼养殖公司Cermaq…

【剑指offer】面试题32:从上到下打印二叉树(java)

从上往下打印二叉树的每个节点&#xff0c;同一层的节点按照从左到右的顺序打印。例如输入下图的二叉树&#xff0c;则一次打印出8&#xff0c;6&#xff0c;10&#xff0c;5&#xff0c;7&#xff0c;9&#xff0c;11。 思路&#xff1a;利用队列,将左右子树加入队列末尾&…

cache命中率、平均访问时间、访问效率的计算公式

cache命中率、平均访问时间、访问效率的计算公式 cache命中率 平均访问时间 访问效率 使用cache可以提高计算机的性能&#xff0c;也提高了主存访问的效率

全息技术“量子飞跃”或彻底改变成像技术

作者&#xff1a;冯卫东 来源&#xff1a;科技日报科技日报北京2月9日电 &#xff08;记者冯卫东&#xff09;据最新一期《自然物理学》报道&#xff0c;英国格拉斯哥大学的物理学家首次找到使用量子纠缠光子来将信息编码为全息图的方法。这一突破了传统全息方法局限性的新型量…

(三)PYTHON字典 元祖 列表尝试应用

&#xff08;三&#xff09;PYTHON字典 元祖 列表尝试应用 1、 使用 join 方法将下划线添加到列表的每一个元素拼接成字符串&#xff0c;li &#xff1d; [alex, eric, rain] li [boom, TNT, zhadan] daying "_".join(li) print(daying) 2、 查找列表中元素&#…

定点数与浮点数的表示方法

计算机组成原理——定点数与浮点数 计算机中常用的数据表示格式有两种&#xff0c;一是定点格式&#xff0c;二是浮点格式。一般来说&#xff0c;定点格式容许的数值范围有限&#xff0c;要求的处理硬件比较简单。而浮点格式容许的数值范围很大&#xff0c;要求的处理硬件比较…

【剑指offer】面试题33:二叉搜索树的后序遍历序列

输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true。否则返回false。假设输入的数组的任意两个数字都互不相同。 代码&#xff1a; package offer; public class ti33 { static boolean VerifyTree(int nums[],int start,in…

AI 3.0》王飞跃教授推荐序——未来智能:人有人用,机有机用

☉ 王飞跃中国自动化学会监事长中国科学院自动化研究所复杂系统管理与控制国家重点实验室主任来源&#xff1a;德先生转自&#xff1a;中国自动化学会初见梅拉妮米歇尔之名&#xff0c;还是20世纪80年代末研究她与侯世达关于类比推理的开创性程序“Copycat”&#xff08;拷贝猫…

计算机组成原理——计算机系统的性能指标(机器字长、存储容量、运算速度)

计算机组成原理——计算机系统的性能指标 计算机系统的性能指标&#xff08;机器字长、存储容量&#xff0c;运算速度&#xff09;&#xff1a; 1. 吞吐量&#xff1a; 一台计算机在某一时间间隔内能够处理的信息量。 2. 响应时间&#xff1a; 从输入有效到系统产生响应之间…