codeforces C. System Administrator 构造含割点的图

来源:互联网 发布:安卓版千里眼偷窥软件 编辑:程序博客网 时间:2024/06/01 08:25

题目链接

http://codeforces.com/problemset/problem/245/A

题意

构造一个含指定割点的连通图

思路

将v左边连一个,右边连n-2个,右边最大连边数为n+1+ (n-2)*(n-3)/2 ,然后n个点至少连n-1条边。

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<string>#include<queue>#include<stack>#include<set>#include<map>#define ll long longusing namespace std;const int INF = ( 2e9 ) + 2;const ll maxn = 1e5+100;int vertex[maxn];int cnt;int main(){    ll n,m,v;    scanf("%I64d%I64d%I64d",&n,&m,&v);    ll maxm = n-1 + (n-2)*(n-3)/2;    int minm = n-1;    cnt=0;    if(m>maxm||m<n-1)        printf("-1\n");    else    {        int u=1;        for(; u<=n&&u==v; u++);        printf("%d %d\n",u,v);        m--;        for(ll i=1; i<=n; i++)            if(i!=u&&i!=v)                vertex[cnt++]=i;        for(int i=0; i<cnt; i++)        {            printf("%I64d %d\n",v,vertex[i]);            m--;        }        for(int i=0; i<cnt; i++)            for(int j=i+1; j<cnt; j++)            {                if(m==0)return 0;                printf("%d %d\n",vertex[i],vertex[j]);                m--;            }    }}
原创粉丝点击