道路分组
来源:互联网 发布:javascript xml dom 编辑:程序博客网 时间:2024/05/01 17:31
道路 分组
【问题描述】
A国是一个由N个城市构成的国家。这N个城市从1到��进行编号。其中,城
市1是A国中资源产出最多的城市,而城市N是A国唯一的港口的所在地。由于这
两个城市之间距离很远,所以A国没有直接从城市1向城市N修建道路。不过,
很多城市之间修建了一些单向通行的道路。从城市1经过若干条道路,是可以到
达城市N的。
城市中的单向道路总共有M条,从1到M进行编号。为了方便管理,国家的
统治者希望能把这些道路分成若干组,每组道路的编号都是连续的。同时,出
于一些奇怪的原因,一种合法的分组方式还需要满足:不存在一条从城市1到城市N的路径,使得路径上的每条道路都属于同一组。
你需要计算:在上述条件的限制下,A国中的道路至少要被分成多少组?
【输入文件】
输入文件为 road. in。
输入文件第一行为两个正整数N,M,分别表示城市数及道路数。
接下来M行,每行两个正整数U,V,表示一条U到V的单向道路。
【输出文件】
输入文件为 road.out。
输出一个正整数,为最少的道路组数。。
对于每个起点,倍增长度,从起点到长度加边,BFS判断即可
#include <cstdio>#include <iostream>#include <vector>#include <queue>#include <cstring>using namespace std;struct node{ int s,t;}a[510000]; int n,m;vector <int> e[210000];bool vis[210000];bool check(int x,int y){ //return 0; queue <int> dl; for(int i=x;i<=y;i++) e[a[i].s].push_back(a[i].t); while(!dl.empty()) dl.pop(); memset(vis,0,sizeof(vis)); vis[1]=1; dl.push(1); while(!dl.empty()) { int d=dl.front(); dl.pop(); if(d==n) return 0; for(int i=0;i<e[d].size();i++) if(!vis[e[d][i]]) vis[e[d][i]]=1,dl.push(e[d][i]); } for(int i=x;i<=y;i++) e[a[i].s].clear(); return 1;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) scanf("%d%d",&a[i].s,&a[i].t); int now=1;//当前的起点 int ans=0; //printf("%d",check(2,2)); printf("%d %d\n",check(2,2),check(3,3)); while(now<=m) { int len=1; for(len=1;now+len<=m;len*=2) if(!check(now,now+len-1)) break; //printf("%d %d %d\n",now,len,check(now,now+len-1)); len>>=1; if(!len) len=1; printf("%d---%d\n",now,len); int nowq=now+len; for(;len>0;len/=2) if(nowq+len<=m&&check(nowq,nowq+len-1)) nowq+=len; else break; ans++; now=nowq; } /*for(int i=1;i<=100;i++) printf("%d %d\n",check(2,2),check(3,3)); */ printf("%d",ans);}
阅读全文
0 0
- 道路分组
- 道路
- 道路
- 道路
- 分组
- 分组
- 分组.
- 分组
- 分组
- 分组
- 分组
- 分组
- 分组
- 分组
- 硬件道路: 软件道路:
- 成功道路
- 人生道路!!!
- 道路重建
- Spring 中配置log4j日志功能
- IDEA MAVEN 容易出现的错误
- Linux下不重启永久修改hostname
- 可扩展标记语言XML()
- Linux oracle sqlplus环境里使用上下左右箭头和删除键---oracle
- 道路分组
- loss_layer.cpp
- 测试开发-iOS测试之移动端测试用例设计总结
- ES6-正则的扩展-Unicode 属性类
- c3p0详细配置
- 如何使用UDP协议给飞秋发送消息
- caffe代码学习方法
- C#学习笔记:文件操作
- Javassist基础与实践