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

来源:互联网 发布:灵枢针灸免费网络课 编辑:程序博客网 时间:2024/05/16 16:05

这里写图片描述



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

代码:

#include<stdio.h>#define maxn 2000+10int 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;}



总结:蓝桥杯的题几乎每一道都能和暴力扯上关系,所以尽情地暴力吧!

1 0
原创粉丝点击