首页 > 其他分享 > AtCoder Beginner Contest 292 E - Transitivity

AtCoder Beginner Contest 292 E - Transitivity

时间:2023-09-01 13:45:18浏览次数:53  
标签:有边 AtCoder Contest int 292 加边 Transitivity

E - Transitivity

原题链接


题意:对于一个有向图,进行加边操作,使最终任意的个点具有传递效果,即若a到b有边,b到c有边,那么a到c也要有边,问最少需要进行多少次操作,使得每个节点所能到达的地方都有直接的边,也就是最短距离为1


思路:怎么加边才是最优的,举个例子a->b->c->d->e 对于a点到其他点的距离大于等于2时,就必须要加边。
因此,最少的操作数,即每个点到其他点的距离是大于等于2的节点对的数目和

#include <bits/stdc++.h>
using namespace std;
const int N = 2010,M=N<<1;
int e[M],ne[M],h[N],idx;
int n,m;
int ans;
int d[M];
void add(int a,int b)
{
	e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void bfs(int S)
{
	memset(d,-1,sizeof(d));
	queue<int> q;
	q.push(S);
	d[S]=0;
	while(q.size())
	{
		int u=q.front();
		q.pop();
		if(d[u]>=2) ans++;
		for(int i=h[u];~i;i=ne[i])
		{
			int v=e[i];
			if(d[v]==-1)
			{
				d[v]=d[u]+1;
				q.push(v);
			}
		}
	}
}
int main()
{
	memset(h,-1,sizeof(h));
	cin>>n>>m;
	while(m--)
	{
		int u,v;
		cin>>u>>v;
		add(u,v);
	}
	for(int i=1;i<=n;i++)
	{
		bfs(i);
	}
	cout<<ans<<'\n';
}

标签:有边,AtCoder,Contest,int,292,加边,Transitivity
From: https://www.cnblogs.com/oystercard/p/17671646.html

相关文章

  • AtCoder Beginner Contest 292 D - Unicyclic Components
    D-UnicyclicComponents原题链接题意:判断一个连通块的边和点个数是否相同思路:对它使用并查集吧点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=200010,M=N<<1;//维护连通图中点和边的个数intsd[N],se[N],p[N];boolf[N];//谁是祖宗int......
  • Atcoder Beginner Contest 317 解题报告
    AtcoderBeginnerContest317ABC316咋没了。暂时A~E。HintsD$\quad$可以算出每次选举需要的改票数。然后变成了一个经典问题。E$\quad$有点naive。不用担心暴力扫T掉,时间复杂度是真的。F$\quad$F1$\qquadn$这么大一维都枚举不了……诶,$a_i$只有$10$?$\qua......
  • AtCoder Beginner Contest 317 F - Nim
    数位DP#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intdp[64][10][10][10][2][2][2][2][2][2];intmain(){lln;intb1,b2,b3;cin>>n>>b1>>b2>>b3;memset(dp,-1,sizeofdp);strings......
  • AtCoder Beginner Contest 215
    [ABC215F]DistMax2 二分出min(|xi-xj|,|yi-yj|),双指针维护是否存在满足条件的点对(i,j),假如二分当前值是x,那么|xi-xj|>=x&&|yi-yj|>=x #include<bits/stdc++.h>usingnamespacestd;#defineendl"\n"typedeflonglongll;consti......
  • AtCoder Beginner Contest 314
    A-3.14#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongint32_tmain(){ios::sync_with_stdio(0),cin.tie(0);strings="141592653589793238462643383279502884197169399375105820974944592307816406286208998628034......
  • AtCoder Beginner Contest 315
    A-tcdr#include<bits/stdc++.h>usingnamespacestd;int32_tmain(){strings;cin>>s;for(autoi:s){if(i!='a'andi!='e'andi!='i'andi!='o'andi!='u�......
  • AtCoder Beginner Contest 287 - C (图论简单题)
    目录C-PathGraph?C-PathGraph?题意判断给定的无向简单图是不是一条链思路n个顶点m条边的无向图若为一条链,那么边数\(m=n-1\),n个顶点相互可达,任意一个顶点的度不超过2利用并查集判整体连通性,在建图时统计度数,最后判断即可由此,n个顶点,n-1条边的无向连通......
  • AtCoder Beginner Contest 315 - E (toposort)
    目录E-PrerequisitesE-Prerequisites题意n本书,序号1~n。给定阅读每本书之前必须要看的书的序号。请你输出任意一种看第一本书所需看书数量最少的方法思路利用拓扑序列先对书之间的制约关系建图,再利用bfs找到包含书本1的连通块,再对全图进行拓扑排序得到拓扑序列......
  • Atcoder Beginner Contest 315 D~G
    D题意:给定一个\(n\timesm\)的字符矩形,重复执行以下操作直到删除字符数为0:对于每一行,若有且仅有一种字符存在,且个数大于1,将这些字符标记对于每一列,若有且仅有一种字符存在,且个数大于1,将这些字符标记删除所有标记的字符求最后还能剩下多少字符。注意到每一行每一列最多被......
  • AtCoder 题目集2
    AtCoder题目集2终于迈入了一个新的阶段,接下来希望质量能高一点吧。现在我主要刷的是1600左右的题,毕竟实力太拉,只能按照”分上200“的策略。(我觉得类型标个“思维”貌似没啥意义,毕竟AT几乎全是思维啊...)编号(NO.)题目难度类型1ABC201E1694,medium思维,XOR......