D - Effective network ( BFS + 思维 )

D - Effective network ( BFS + 思维 )

题目链接:https://vjudge.net/problem/Gym-101597D

题意:n个点m条边的图,是否存在一个子图,使得(子图大小R) - (给定的K)>= (子图任意两点间的最大距离len)。

思路:考虑上图的公式,如果我现在子图的大小再+1,那么(子图任意两点间的最大距离len)最多也就+1,还是成立的。这样我们只需要考虑子图等于原图的情况就好了。n遍bfs找两点间最大距离,套公式。

Input

7 9 3
1 3
1 4
1 5
2 5
3 4
6 3
6 1
4 6
1 7

Output

4
1 3 4 6

代码:

#include 

using namespace std;

int n,m,k;
vector G[5005];
int via[5005];
typedef struct node {
    int x,dep;
}ty;
ty t,d;

int bfs( int node )
{
    int now = 0;
    memset(via,0,sizeof(via));
    queue Q;
    t.x=node;t.dep=0;
    via[node] = 1;
    Q.push(t);
    while ( !Q.empty() ) {
        t = Q.front(); Q.pop();
        for ( int i=0; i> n >> m >> k;
    for ( int i=0; i=M ) {
        cout << n << endl;
        for ( int i=1; i<=n; i++ ) cout << i << " ";
    }
    else cout << "0" << endl;

    return 0;
}

 

你可能感兴趣的:(图论补题)