题目要求
连通图是指任意两个顶点之间都能相互可达的图,给你一个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;
}