上杭网站开发,织梦电影网站模板,服务器主机如何搭建wordpress,做网站烧钱吗题目背景
抗日战争时期#xff0c;冀中平原的地道战曾发挥重要作用。
题目描述
地道的多个站点间有通道连接#xff0c;形成了庞大的网络。但也有隐患#xff0c;当敌人发现了某个站点后#xff0c;其它站点间可能因此会失去联系。
我们来定义一个危险系数 DF(x,y)冀中平原的地道战曾发挥重要作用。
题目描述
地道的多个站点间有通道连接形成了庞大的网络。但也有隐患当敌人发现了某个站点后其它站点间可能因此会失去联系。
我们来定义一个危险系数 DF(x,y)
对于两个站点 x 和 y(xy), 如果能找到一个站点 z当 z 被敌人破坏后x 和 y 不连通那么我们称 z 为关于 x,y 的关键点。相应的对于任意一对站点 x 和 y危险系数 DF(x,y) 就表示为这两点之间的关键点个数。
本题的任务是已知网络结构求两站点之间的危险系数。
输入格式
输入数据第一行包含 2 个整数 n(2≤n≤1000)m(0≤m≤2000)分别代表站点数通道数。
接下来 m 行每行两个整数 u,v(1≤u,v≤n,uv) 代表一条通道。
最后 1 行两个数 u,v代表询问两点之间的危险系数 DF(u,v)。
输出格式
一个整数如果询问的两点不连通则输出 −1−1。
输入输出样例
输入
7 6
1 3
2 3
3 4
3 5
4 5
5 6
1 6
输出
2
说明/提示
时限 1 秒, 64M。蓝桥杯 2013 年第四届国赛
我们考虑找出所有的路线如果一个点是关键点则此点绝对会出现在每一条路线中故我们在dfs的过程中记录下每个点被走过的次数。最后遍历一遍所有的点找出和总路径数相同的点就是关键点。
#includebits/stdc.h
using namespace std;
typedef long long ll;
const int M4e410;
const int N1e610;
int n,m;
vectorint mp[1001];
int vis[1001];
int cnt[1001];
int sum;
void dfs(int cur,int e)
{if(cure){sum;for(int i1;in;i){if(vis[i]1)cnt[i];}return ;}for(int i0;imp[cur].size();i){int kmp[cur][i];if(!vis[k]){vis[k]1;dfs(k,e);vis[k]0;}}
}
void solve()
{cinnm;for(int i0,x,y;im;i){cinxy;mp[x].push_back(y);mp[y].push_back(x);}int s,e;cinse;vis[s]1;dfs(s,e);int ans0;if(sum0){for(int i1;in;i){if(cnt[i]sum)ans;}coutans-2endl;}elsecout-1endl;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);ll t1;
// cint;while(t--){ solve();}return 0;
}