您的位置:首页 > 其它

2017蓝桥杯模拟题 风险度量(暴力枚举)

2017-04-06 18:04 239 查看


思路:由于数据范围比较小,所以直接枚举每一个点是否为关键点即可

代码:

#include<stdio.h>

#define maxn 2000+10
int pre[maxn],u[maxn],v[maxn];
int n,m,x,y;

void init()
{
for(int i=1; i<=n; ++i)
pre[i]=i;
}

int Find(int x)
{
if(x==pre[x])
return x;
pre[x]=Find(pre[x]);
return pre[x];
}

int linked()
{
for(int i=0; i<m; ++i)
{
int fx=Find(u[i]),fy=Find(v[i]);
if(fx!=fy)
pre[fx]=fy;
}
int fx=Find(x),fy=Find(y);
if(fx==fy)
return 1;
return 0;
}

int main()
{
scanf("%d%d",&n,&m);
for(int i=0; i<m; ++i)
scanf("%d%d",&u[i],&v[i]);
scanf("%d%d",&x,&y);
if(!linked())//检查是否连通,不能连通直接结束
{
printf("-1\n");
return 0;
}
int ans=0;
for(int i=1; i<=n; ++i)//枚举每一个点
{
if(i==x||i==y)
continue;
init();
for(int j=0; j<m; ++j)
{
if(u[j]==i||v[j]==i)//去除这个点所在的边
continue;
int fx=Find(u[j]),fy=Find(v[j]);
if(fx!=fy)
pre[fx]=fy;
}
int fx=Find(x),fy=Find(y);
if(fx!=fy)
ans++;
}
printf("%d\n",ans);
return 0;
}


总结:蓝桥杯的题几乎每一道都能和暴力扯上关系,所以尽情地暴力吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: