读题可以发现,如果两个村庄不能互相连通,那就算作一对 (a<b)。

显然是可以用floyd全局多源最短路来做的,如果不存在最短路,那么就是不能互通,但是这道题的数据范围N<=10^5,跑floyd复杂度为O(n^3)即10^15远大于10^8,显然是不行,复杂度级别只能是O(n),线性的,或者O(nlogn)。

看一下样例说明

显然如果两个村庄位于同一个连通块中,必然找不出(a<b),如果不在同一个连通块中,必然会产生(a<b),且数量刚好是第一个连通块的村庄数量 乘以 第二个连通块的数量。

为什么?

假设下图,1和2相连,3和4相连。

明显可以发现1与3,4,都不相连,产生了第二个连通块村庄数量的(a<b)

2与3,4,也不相连,即为2*2=4。

所以直接使用并查集:【模板】并查集 - 洛谷

初始给每个村庄都分配一个连通块,如果有桥相连,就把它们加入同一个连通块。

因为会摧毁编号为1~k的桥,所以输入的时候只需要i>k的部分,不需要合并被摧毁的部分。

细节(以样例说明):第四座桥把4接到了连通块1上,第五座桥把1接到了连通块3上,这里就出现了一个问题,4并没有被更新,所以最后还要再跑一遍find,更新所有情况。(本蒟蒻考试的时候熬夜昏迷了,没想到这一点)

应该能AC的代码

#include <bits/stdc++.h>
#define int long long
using namespace std;int n,m,k,u,v,f[100001],cnt,ans;
bitset<100001>vis;
int a[100001];//连通块编号,其中村庄数量
vector<int>a_;
//定义f[i]=j为:i村庄在连通块j中
int find(int x){if(f[x]==x)return x;else return f[x]= find(f[x]);
}
void unit(int x,int y){x= find(x),y= find(y);f[x]=y;
}signed main(){ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);cin>>n>>m>>k;for(int i=1;i<=n;++i)//初始化每个村庄的连通块f[i]=i;for(int i=1;i<=m;++i){cin>>u>>v;if(i>k){//1~k的桥全部被摧毁,只需要i>k的桥unit(u,v);}}for(int i=1;i<=n;++i)//跑一遍find,更新最终情况find(i);for(int i=1;i<=n;++i){//累计连通块编号a[f[i]]++;}for(int i=1;i<=n;++i)//把累计完的连通块全部拿出来if(a[i])a_.push_back(a[i]);for(int i=0;i<a_.size();++i)//配对连通块,累计答案for(int j=i+1;j<a_.size();++j)ans+=a_[i]*a_[j];cout<<ans;return 0;
}

如果有错误或者有更好的思路,欢迎评论!

看看算法大赛还会不会开放OJ让我们再次测试。

同时预祝各位在2023/4/8的蓝桥杯省赛中while(true)rp++

别熬夜 : )

2023首届大学生算法大赛 - 村庄相关推荐

  1. 2023首届大学生算法大赛——补题

    1. 拿饼干 内存限制:128Mb 时间限制:1s 题目描述 小明今天外出野炊.他的母亲为他制作了M种他喜欢的饼干,共有N块.每块饼干都被标了编号,从1一直标到N.第i块饼干的重量是W[i].饼干种类 ...

  2. 2023首届大学生算法大赛 - 逆序对

    一眼应该能看出来这道题朴素算法是冒泡排序,但是逆序对这类题要求复杂度小于等于O(nlogn), 因此可以用线段树,树状数组,归并排序之类的试试. 洛谷上有一样的题:逆序对 - 洛谷 AC代码(归并排序 ...

  3. 2023首届大学生算法大赛 - 拿饼干

    读题可以发现是分组背包问题,但是要求每个组别至少用上一个,所以调用的前一种状态必须是已经含有前一组的物品,打个标记即可. #include <bits/stdc++.h> using na ...

  4. 奖金16万!首届电子商务AI算法大赛ECAA报名开启

    由商务部和北京市人民政府主办的2021中国电子商务大会将于9月在京开幕.作为此次大会的重要组成部分,由第四范式承办的首届电子商务AI算法大赛ECAA(Electronic Commercial AI ...

  5. 年度最Hot,三大热点赛题,首届「马栏山」杯国际音视频算法大赛正式开赛

    不久之前,一段使用人工智能修复老北京影像的视频火爆全网,引起了极大的关注.这段修复视频,让我们无须穿越,就能体验一把 100 年前的老北京生活. 在这段效果惊艳的修复视频背后,用到了多项前沿研究,如基 ...

  6. 【专访】首届腾讯社交广告“高校算法大赛”落幕 冠亚季军团队参赛心得精彩分享

    导言: 7月6日,首届腾讯社交广告"高校算法大赛"正式落幕.在众多参赛团队中,来自南京大学的三人组合"nju_newbie"一举夺得决赛冠军,将30万元奖金收入 ...

  7. 江苏机器人竞赛南航_关于举办南航金城学院首届大学生机器人比赛暨江苏省大学生机器人大赛院内选拔赛的通知...

    各教学单位: 由江苏省教育厅与江苏省科学技术协会举办江苏省大学生机器人大赛,旨在引导高等学校加强机器人相关专业和课程的建设,深化教学改革,加强科研和工程实践能力的训练,提高大学生的创新能力.理论知识应 ...

  8. 江苏机器人竞赛南航_关于公布2020年南航金城学院首届大学生机器人比赛暨江苏省大学生机器人大赛校内选拔赛的评审结果的通知...

    由学校教学科研处和机电工程与自动化学院共同举办的南航金城学院首届大学生机器人比赛暨江苏省大学生机器人大赛校内选拔赛评选工作于10月16日10:00-13:30在博知楼的机自学院各创新实验室举行.选拔赛 ...

  9. 首届全球RTB(实时竞价)广告DSP算法大赛

    首届全球RTB(实时竞价)广告DSP算法大赛 首届全球RTB(实时竞价)广告DSP算法大赛 竞赛指南     RTB (Real Time Bidding, 实时竞价) 是近年来计算广告领域最激动人心 ...

最新文章

  1. 动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind
  2. OpenCV3.3中逻辑回归(Logistic Regression)使用举例
  3. cmake使用示例与整理总结_QTVLC的博客-CSDN博客_cmake使用示例与整理 施公队演示时用的blog B zhan
  4. unittest单元测试框架之unittest案例(二)
  5. config之安全(用户认证)
  6. 前端入门11-JavaScript语法之数组
  7. 腾讯云TStack获“下一代云计算技术创新奖”,助力云生态信息创新发展
  8. ab plc编程软件_三菱PLC原装和高仿怎么区分?仿真和编程软件一样吗?
  9. echarts 柱状图不显示y坐标轴_Python+matplotlib自定义坐标轴位置、颜色、箭头
  10. PHP框架最低支持PHP版本
  11. SAP License:COPA计划
  12. linux下查看某软件是否已安装, ubuntu安装deb包
  13. java 百分比怎么比较_这88道阿里高级岗面试题,刷掉了80%以上的Java程序员
  14. Linux IO模型漫谈(4)- 非阻塞IO
  15. 龙达pm3 proxmark3各个版本
  16. MessageQueue的使用方法(一)
  17. win10应用商店linux_解决win10应用商店“由于公司策略 此应用已被阻止”的方法...
  18. video标签 设置autoplay无效
  19. 微处理器和由微型计算机构成,微处理器的组成
  20. iOS开发 XCode如何清理历史的项目工程记录

热门文章

  1. FFHQ数据解压问题记录
  2. 计算机密码是空的怎么重置,电脑忘记开机登录密码怎么办? Windows 密码重置 - 合一学院...
  3. Vue.js实战——内置指令(二)
  4. office365服务器没有响应,修复:由于长时间运行的脚本,Office 365没有响应
  5. 微信windows版_微信悄悄更新,这个烦人的功能限制,终于被取消
  6. 开启子进程的两种方法
  7. 宋丹丹晒年轻旧照 桃眼杏腮被赞美女
  8. 同事写了一个责任链模式,bug无数...
  9. CSS垂直居中的三种方式
  10. 容联CPO熊谢刚:“通讯+AI”打造数智化新基建