oj1616: 连通图

题目要求
连通图是指任意两个顶点之间都能相互可达的图,给你一个N个顶点,M条边的无向连通图,问最多可以删除多少条边,使这个图仍然连同。
Input
输入包括如下几部分。(多组输入)
第一部分:输入两个数N(1<=N<=100)和M,分别表示该图的顶点数和边数。
第二部分:M行,每行由两个数A、B组成,表示顶点A和B之间连有一条边,同一条边不会重复出现。
Output
输出最多能删除多少条边。
Sample Input
Raw
1 0
Sample Output
Raw
0
这个题一开始看到点需要在两点之间不断运动,就想写DFS来寻找,
两个点之间联通,后面的点没有被用到。

void DFS(int x)
{
	
	vis[x]=1;
	for(int y=2;y<=n;y++)
	{
		if((a[x][y]==1||a[y][x]==1)&&vis[y]==0)
				DFS(y);
	}	
}

但是!!!!
这个写完后突然发现,这题好像是个定值规律题,由点之间联通可知。
1-----2
1-----2----3;
可以把234作为一个整体与1相通。

在这里插入图片描述
数字往后也是同理。所以联通个数为n-1。现在这道题就是完全的水题了。。。。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
	int n, m;
	while (cin >> n >> m)
	{
		int x, y;
		for (int i = 1; i <= m; i++)
			cin >> x >> y;
		cout << m - n+1 << endl;
	}
	return 0;
}
发布了38 篇原创文章 · 获赞 27 · 访问量 3180

猜你喜欢

转载自blog.csdn.net/qq_45891413/article/details/104999946