当前位置: 首页 > news >正文

响应式网站 外贸用什么软件做动漫视频网站好

响应式网站 外贸,用什么软件做动漫视频网站好,店铺设计软件,南京有哪些做网站的公司一、前言 因为要开始准备年底的校赛和明年年初的ACM、蓝桥杯、天梯赛#xff0c;于是开始按专题梳理一下对应的知识点#xff0c;先从简单入门又值得记录的内容开始#xff0c;并查集首当其冲。 二、我的模板 虽然说是借用了jiangly鸽鸽的板子#xff0c;但是自己也小做…一、前言 因为要开始准备年底的校赛和明年年初的ACM、蓝桥杯、天梯赛于是开始按专题梳理一下对应的知识点先从简单入门又值得记录的内容开始并查集首当其冲。 二、我的模板 虽然说是借用了jiangly鸽鸽的板子但是自己也小做修改了部分命名啥的大体内容并没有修改jiangly鸽鸽yyds #include bits/stdc.hstruct DisjointSet {int _n;std::vectorint _fa,_size;DisjointSet(){}DisjointSet(int n){init(n);}void init(int n) {_fa.resize(n);std::iota(_fa.begin(),_fa.end(),0);_size.assign(n,1);}int find(int x) {if(x!_fa[x]) {_fa[x] find(_fa[x]);}return _fa[x];}bool same(int x,int y) {return find(x)find(y);}bool merge(int x,int y) {int fx find(x);int fy find(y);if(fx!fy) {_size[fx]_size[fy];_fa[fy] fx;return true;}return false;} }; 三、并查集介绍 并查集disjoint set英文直译过来是不相交的集合。我们中文取名成并查集是因为这类集合主要具有两个操作并和查并即合并两个集合查即查询集合的某些信息。 3.1 并 如果有学习过树的知识那么理解并查集就比较轻松了。“并”操作类似于将森林两棵树转化为一棵树我们只需要让其中一个并查集的根节点的父亲结点指向另外一个并查集的根节点即可。当然选择的时候我们倾向于让深度小的树的根节点指向深度大的树的根节点。不过后续用上路径压缩后谁指向谁基本没有什么太大的影响。实际写代码中我们主要的操作就是对一个并查集的根节点进行修改 3.2 查 1.查询某个节点的根节点 2.查询两个节点是否处于同一个并查集中 3.查询一共有几个并查集 4.查询节点数量最多的并查集和它的节点数量 5.查询节点位于自身并查集的深度 3.3 初始化 在没有进行任何合并前一个并查集的根节点应该为它自身切记写代码的时候不要忘记并查集的初始化当然如果用我的模板的话就不会忘记初始化构造函数已经写好初始化了 3.4 路径压缩 正常来说并查集合并的时间复杂度为O(1)而查询的最坏时间复杂度为O(n)常见的最坏情况就是只有左子树或者只有右子树的一棵树的查询。而如果我们在查询时顺带将查询路径上的结点的父节点属性顺带修改为真正的根节点那么综合下来时间复杂度将会被均摊成O(logn)这是一个非常优秀的优化。 四、专题训练 以我学校OJ题目展开训练 4.1 题目总览 4.2 1520: 数据结构-并查集-家庭问题 思路 这道题是很典型的用并查集做的题目先对并查集进行初始化我们直接把有关系的两人进行合并如果已经处于同一个并查集中则不做操作。后续题目需要我们查询的是并查集的数量以及并查集中最大的节点数量 参考代码 前面都是并查集模板注意构造并查集的时候至少把节点数1因为用于实现的vetcor下标从0开始大部分题目的下标是从1开始的最后查询的时候利用set进行排序输出即可 #include bits/stdc.h using i64 long long;struct DisjointSet {int _n;std::vectorint _fa,_size;DisjointSet(){}DisjointSet(int n){init(n);}void init(int n) {_fa.resize(n);std::iota(_fa.begin(),_fa.end(),0);_size.assign(n,1);}int find(int x) {if(x!_fa[x]) _fa[x] find(_fa[x]);return _fa[x];}bool same(int x,int y) {return find(x)find(y);}bool merge(int x,int y) {int fx find(x);int fy find(y);if(fx!fy) {_size[fy]_size[fx];_fa[fx] fy;return true;}return false;} }; using pii std::pairint,int;int main() {std::cin.tie(nullptr)-sync_with_stdio(false);int n,k;std::cin n k;DisjointSet disjointSet DisjointSet(n1);for(int i 0;ik;i) {int mem1,mem2;std::cin mem1 mem2;disjointSet.merge(mem1,mem2);}std::setpii st;for(int i 1;in;i) {int t disjointSet.find(i);st.insert(std::make_pair(disjointSet._size[t],t));}std::cout st.size() (*st.rbegin()).first \n;return 0; }4.3 1565: 并查集-团伙 思路 这个题由于enemy的存在需要多维护一个ene[]数组ene[]数组初始化为0如果遇到p等于0的时候分别判断x和y的ene是否为0如果为0则代表他们当前没有enemy则把ene值设置成对方即x和y分别属于两个并查集中如果当前存在ene那么就把自己合并到他们enemy的并查集中因为敌人的敌人是朋友。至于p等于1的情况当做正常并查集的合并来做。最后输出并查集的数量计算父节点等于自身的节点数量即可 参考代码 #include bits/stdc.h using i64 long long;struct DisjointSet {int _n;std::vectorint _fa,_size;DisjointSet(){}DisjointSet(int n){init(n);}void init(int n) {_fa.resize(n);std::iota(_fa.begin(),_fa.end(),0);_size.assign(n,1);}int find(int x) {if(x!_fa[x]) {_fa[x] find(_fa[x]);}return _fa[x];}bool same(int x,int y) {return find(x)find(y);}bool merge(int x,int y) {int fx find(x);int fy find(y);if(fx!fy) {_size[fy]_size[fx];_fa[fx] fy;return true;}return false;} };int main() {std::cin.tie(nullptr)-sync_with_stdio(false);int n,m;std::cin n m;DisjointSet disjointSet DisjointSet(n1);std::vectorint ene(n1,0);for(int i 0;im;i) {int t,x,y;std::cin t x y;if(t) {//enemyif(ene[x]) {disjointSet.merge(y,ene[x]);}else {ene[x] y;}if(ene[y]) {disjointSet.merge(x,ene[y]);}else {ene[y] x;}}else {//frienddisjointSet.merge(x,y);}}int ans 0;for(int i 1;in;i) {if(disjointSet.find(i)i) ans;}std::cout ans \n;return 0; }4.4 1566: 并查集-打击犯罪 思路 题目有点反直觉我一开始想着从1到k依次进行判断断开某个关系后可以使得他们中最大的一个危险程度小于等于n/2然后后来发现写起来很困难。正难则反因此我们考虑从n开始循环跑到1结束每次循环让这个循环变量i这个节点和它有关系并且大于k的j节点进行合并然后看看是否有危险程度大于n/2的并查集即可。 参考代码 #include bits/stdc.h using i64 long long;struct DisjointSet {int _n;std::vectorint _fa,_size;DisjointSet(){}DisjointSet(int n){init(n);}void init(int n) {_fa.resize(n);std::iota(_fa.begin(),_fa.end(),0);_size.assign(n,1);}int find(int x) {if(x!_fa[x]) {_fa[x] find(_fa[x]);}return _fa[x];}bool same(int x,int y) {return find(x)find(y);}bool merge(int x,int y) {int fx find(x);int fy find(y);if(fx!fy) {_size[fx]_size[fy];_fa[fy] fx;return true;}return false;} };int main() {std::cin.tie(nullptr)-sync_with_stdio(false);int n;std::cin n;std::vectorstd::vectorint edges(n1,std::vectorint());DisjointSet disjointSet DisjointSet(n1);for(int i 0;in;i) {int siz;std::cin siz;for(int j 0;jsiz;j) {int t;std::cin t;edges[i1].emplace_back(t);}}for(int k n;k1;k--) {for(auto edge:edges[k]) {if(edgek) {disjointSet.merge(k,edge);}}if(disjointSet._size[disjointSet.find(k)]n/2) {std::cout k \n;return 0;}}return 0; }4.5 1567: 并查集-搭配购买 思路 并查集01背包中间对数据的存储搞得我很头疼用了一堆vector先把c[]和d[]数组存起来做了并查集的合并后再算一个并查集c[]的总和sumc[]以及d[]的总和sumd[]然后把计算好的总和放进real_c[]和real_d[]数组中再使用一个dp[]数组做一遍01背包最后的dp[w]输出即可 参考代码 #include bits/stdc.h using i64 long long;struct DisjointSet {int _n;std::vectorint _fa,_size;DisjointSet(){}DisjointSet(int n){init(n);}void init(int n) {_fa.resize(n);std::iota(_fa.begin(),_fa.end(),0);_size.assign(n,1);}int find(int x) {if(x!_fa[x]) {_fa[x] find(_fa[x]);}return _fa[x];}bool same(int x,int y) {return find(x)find(y);}bool merge(int x,int y) {int fx find(x);int fy find(y);if(fx!fy) {_size[fx]_size[fy];_fa[fy] fx;return true;}return false;} }; using pii std::pairint,int;int main() {std::cin.tie(nullptr)-sync_with_stdio(false);int n,m,w;std::cin n m w;std::vectorint c,d;for(int i 0;in;i) {int tmpc,tmpd;std::cin tmpc tmpd;c.emplace_back(tmpc);d.emplace_back(tmpd);}DisjointSet disjointSet DisjointSet(n1);for(int i 0;im;i) {int x,y;std::cin x y;disjointSet.merge(x,y);}std::vectorint sumc(n1,0),sumd(n1,0);for(int i 1;in;i) {int t disjointSet.find(i);sumc[t] c[i-1];sumd[t] d[i-1];}std::vectorint real_c,real_d;for(int i 1;in;i) {if(sumc[i]!0) {real_c.emplace_back(sumc[i]);real_d.emplace_back(sumd[i]);}}std::vectorint dp(w1,0);for(int i 0;ireal_c.size();i) {for(int j w;jreal_c[i];j--) {dp[j] std::max(dp[j],dp[j-real_c[i]]real_d[i]);}}std::cout dp[w] \n;return 0; }五、后记 剩下的题目及并查集的进一步运用求最小生成树的Kruskal算法见后续的2
http://www.hkea.cn/news/14349371/

相关文章:

  • 网站开发属于软件吗烟台网站建设技术托管
  • 获取网站漏洞后下一步怎么做平面设计师工作内容
  • 网站建设培训学院做网店的进货网站
  • 网站设计怎么做wordpress 文件结构
  • 建设网站要多久的时间什么是网络营销设计
  • 专业的广州微网站建设普通人做电商要多少钱
  • 南宁两学一做网站知名品牌形象设计公司
  • 关于建设教体局网站的申请域名购买 网站建设
  • 韩漫网站建设织梦网站添加视频教程
  • 布吉网站建设哪家便宜logo制作在线
  • 网站建设面板舞台搭建
  • 网站建设设计有哪些设计培训网页版
  • 内蒙古知名网站建设网络营销运营推广
  • 自学网站建设看什么书常见的跨境电商平台有哪些
  • 浏览器正能量网站免费软件免费下载模板ppt
  • 怎么样自己创建网站六安市论坛
  • 网站首页策划怎么做云南企业网站建设
  • 网站正能量晚上在线观看庐江网站制作
  • 珠海开发网站公司中国菲律宾地图
  • 手机网站建设需求文档建立一个简单的企业官网
  • 九江市住房和城乡建设厅网站司法局门户网站建设该报告
  • 盘锦网站设计电商运营培训多少钱
  • 美妆网站源码asp烟台H5网站设计公司
  • 临泉建设网站网站建设会碰到什么问题
  • 口碑好的赣州网站建设pythonunicode转码
  • 注册网站商标多少钱网站空间 windows linux
  • 网站开发案例代码58同城app下载
  • 网站制作公司-山而望城经济建设开区门户网站
  • 深圳做微信商城网站网站 个人 公司 区别
  • 网站做跳转影响排名吗直播带货系统