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

AtCoder292 E 思维

题意:

给定一副n(n≤3000)n(n\leq 3000)n(n3000)个顶点,mmm条有向边的图,可以在图中添加有向边,求添加的最少边数,使得这副图满足:如果顶点aaa到顶点bbb有边,顶点bbbccc右有边,那么顶点aaa到顶点ccc也有边

Solution:

考虑一条单向链,按指向的方向按顺序是A,B,C,D,...A,B,C,D,...A,B,C,D,...

显然,A→B,B→CA\rightarrow B,B\rightarrow CAB,BC需要添加一条边A→CA\rightarrow CAC,此时A→C,C→DA\rightarrow C,C\rightarrow DAC,CD需要添加A→DA\rightarrow DAD。更一般的情况是,在从AAA出发能到达的顶点里,只有与AAA距离为1的不需要添加边,只需要和其他点建边即可,并查集不适合有向图,O(n)O(n)O(n)的搜索可以满足要求,每个顶点搜索一次,总复杂度O(n2)O(n^2)O(n2)

#include<iostream>
#include<vector>
#include<cstdlib>
#include<numeric>
#include<unistd.h>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<set>
#include<map>
#include<stack>
#include<utility>
#include<cctype>
#include<cassert>
#include<thread>
#include<bitset>
using namespace std;using ll=long long;
const int N=2e5+5,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=998244353;struct way {int to,next;
}edge[N<<1];
int cnt,head[N];void add(int u,int v) {edge[++cnt].to=v;edge[cnt].next=head[u];head[u]=cnt;
}int n,m,dis[N],vis[N];int main() {#ifdef stdjudgefreopen("in.txt","r",stdin);auto TimeFlagFirst=clock();#endifstd::ios::sync_with_stdio(false);std::cin.tie(nullptr);cin>>n>>m;for(int i=1;i<=m;i++) {int u,v;cin>>u>>v;add(u,v);}int tot=0;queue<int>q;for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) vis[j]=false;while(!q.empty()) q.pop();q.push(i);while(!q.empty()) {int u=q.front(); q.pop();vis[u]=true;for(int j=head[u];j;j=edge[j].next) {int v=edge[j].to;if(vis[v]) continue;q.push(v);}}for(int j=1;j<=n;j++) {if(i!=j&&vis[j]) tot++;}for(int j=head[i];j;j=edge[j].next) tot--;}cout<<tot<<endl;#ifdef stdjudgefreopen("CON","r",stdin);std::cout<<std::endl<<"耗时:"<<std::clock()-TimeFlagFirst<<"ms"<<std::endl;std::cout<<std::flush;system("pause");#endifreturn 0;
}
http://www.lryc.cn/news/35204.html

相关文章:

  • 20230309英语学习
  • CAD转换PDF格式怎么弄?教你几种方法轻松搞定!
  • AtCoder 259E LCM
  • MQTT协议-取消订阅和取消订阅确认
  • 90后小伙,用低代码“整顿”旅游业,年入2000万,他是怎么做到的?
  • C51---PWM 脉冲宽度调制
  • 毕业设计 基于51单片机WIFI智能家居系统设计
  • Nginx服务优化措施与配置防盗链
  • Java 某厂面试题真题合集
  • 很特别的5G市场,5.75亿部手机,却有11亿5G用户,这是怎么了?
  • go modules
  • Baklib客户故事:快递助手ERP
  • MongoDB学习(java版)
  • RK3568平台开发系列讲解(显示篇)什么是DRM
  • Python蓝桥杯训练:基本数据结构 [二叉树] 上
  • vuex基础之初始化功能、state、mutations、getters、模块化module的使用
  • WebSphere中间件漏洞总结
  • Unity之ASE实现影魔灵魂收集特效
  • 半入耳式耳机运动会不会掉、佩戴超稳固的运动耳机推荐
  • 使用Tensorflow完成一个简单的手写数字识别
  • OpenGL三种向着色器传递数据的方法 attributes,uniform,texture以及中间产物
  • 详解package.json和package-lock
  • 02-CSS
  • JavaScript 中的类型转换机制以及==和===的区别
  • RocketMQ基础篇(一)
  • Android前沿技术—gradle中的build script详解
  • 深入浅出PaddlePaddle函数——paddle.zeros_like
  • 物料-零部件分类属性
  • TypeError: cannot pickle ‘module‘ object
  • [MySQL索引]3.索引的底层原理(二)