POJ——T3352 Road Construction
2024-08-27 13:28:52
http://poj.org/problem?id=3352
vis表示访问的次序 low的值相同的点在同一连通分量
#include <algorithm>
#include <cstring>
#include <cstdio> using namespace std; const int N();
int n,m,u,v,ans;
int head[N],sumedge;
struct Edge
{
int to,next;
Edge(int to=,int next=) :
to(to),next(next) {}
}edge[N<<]; void ins(int from,int to)
{
edge[++sumedge]=Edge(to,head[from]);
head[from]=sumedge;
} int tim,dfn[N],low[N],vis[N],du[N];
int sumcol,col[N],colvis[N]; void DFS(int now,int pre)
{
low[now]=dfn[now]=++tim;
vis[now]=;
for(int i=head[now];i;i=edge[i].next)
{
int go=edge[i].to;
if(go==pre) continue;
if(!vis[go])
{
DFS(go,now);
low[now]=min(low[now],low[go]);
} else if(vis[go]==)
low[now]=min(low[now],dfn[go]);
}
vis[now]=;
} int main()
{
scanf("%d%d",&n,&m);
for(;m;m--)
{
scanf("%d%d",&u,&v);
ins(u,v); ins(v,u);
}
for(int i=;i<=n;i++)
if(!vis[i]) DFS(i,i);
for(u=;u<=n;u++)
for(int j=head[u];j;j=edge[j].next)
{
v=edge[j].to;
if(low[u]!=low[v])
du[low[u]]++;
}
for(int i=;i<=n;i++)
if(du[i]==) ans++;
printf("%d\n",(ans+)>>);
return ;
}
最新文章
- ubuntu 14.04LTS 环境下配置NFS服务
- nginx 各类网站设置 (laravel , thinkphp , nodejs , https)
- lua中的string类型
- ip相关
- 在线生成CSS样式和兼容的字体格式
- 使用stringstream时的清空操作
- 【转】GCC使用简介
- scp输入密码问题
- bzoj1475
- 你能在windows上创建一个叫做AUX的文件夹吗?
- Android Native/Tombstone Crash Log 详细分析(转)
- windows10快捷键
- Delphi事件的广播 good
- HDU 5025 Saving Tang Monk
- 【python练习题】程序1
- Leetcode 326.3的幂 By Python
- 使用redux简单的实现加法运算(简单的状态改变)
- Android TextView 支持的HTML标签
- IP欺骗:要虚拟很多IP的情况:在一台机上虚拟的IP跨网段的处理,可通过在服务器端添加路由来实现
- 总结一发linux常用命令