计蒜客习题:修建大桥
题目
样例
思路
利用DFS记录能够达到的点数,结束后输出n-num-1。
代码
#include<iostream>
#include<cstring>
using namespace std;
const int MAX_N = 1010;
const int MAX_M = 1000100;
struct edge {
int v, next;
} e[MAX_M];
int p[MAX_N], eid,num=0,n,m;
bool vst[MAX_N];
void init() {
memset(p, -1, sizeof(p));
memset(vst, 0, sizeof(vst));
eid = 0;
}
void insert(int u, int v) {
e[eid].v = v;
e[eid].next = p[u];
p[u] = eid++;
}
void dfs(int u) {
vst[u] = true;
for (int i = p[u]; i != -1; i = e[i].next) {
if (!vst[e[i].v]) {
num++;
dfs(e[i].v);
}
}
}
int main()
{
cin>>n>>m;
init();
while(m--)
{
int x,y;
cin>>x>>y;
insert(x,y);
insert(y,x);
}
for(int i=1;i<=n;i++)
dfs(i);
cout<<n-1-num;
return 0;
}