Codeforces 659E New Reform【DFS】
2024-08-30 15:00:54
题目链接:
http://codeforces.com/problemset/problem/659/E
题意:
给定n个点和m条双向边,将双向边改为单向边,问无法到达的顶点最少有多少个?
分析:
无法到达的话即入度为0。
DFS判断每一个连通块中是否存在环,如果存在环,就能保证环中每个点的入度都大于等于1。否则,有头有尾,头的入度为0。
代码:
#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
#include<vector>
using namespace std;
const int maxn = 1e5 + 5;
vector<int>v[maxn];
int vis[maxn];
int ans;
void dfs(int now, int pre)
{
if(vis[now]) {ans = 0;return;}
vis[now] = 1;
for(int i = 0; i < v[now].size(); i++){
if(v[now][i] != pre)
dfs(v[now][i], now);
}
}
int main (void)
{
int n, m;scanf("%d%d", &n,&m);
int a, b;
for(int i = 0; i < m; i++){
scanf("%d%d", &a, &b);
v[a].push_back(b);
v[b].push_back(a);
}
memset(vis, 0, sizeof(vis));
int res = 0;
for(int i = 1; i <= n; i++){
if(vis[i]) continue;
ans = 1;
dfs(i, 0);
res += ans;
}
printf("%d\n", res);
return 0;
}
最新文章
- 与你相遇好幸运,使用gulp流程化Typescript后端开发
- meta标签和作用
- 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?
- Java之重载与覆盖
- Android数据共享
- android EditText长按屏蔽ActionMode context菜单但保留选择工具功能
- OC5_复合类的内存管理
- R 语言画图的基本参数
- Android 颜色渲染(五) LinearGradient线性渲染
- uva 10401 Injured Queen Problem(dp)
- android 自定义百度地图放大缩小
- shell输出不换行符合换行符
- arcgis属性选取like用法
- 精通 JS正则表达式(转)
- 数据结构 单链表&;顺序表
- 物理引擎中velocity的单位是个什么鬼?
- VR一体机如何退出FFBM(QFIL)
- 【Java编程思想笔记】注解--元注解
- 【坑】linux目录软连接的相关操作--很容易误操作
- JavaScript基础回顾一(类型、值和变量)