题面:
给定n个顶点,m条边,任意两点并且最大距离小于k,两个顶点只能连一条边,询问是否能构造出这样的图型
思路:
1.n = 1时进行特判,只有k>1时成立
2. m = n(n-1)/2时,是完全图,只有k>2时成立
3.n-1 <= m < n(n-1)/2时,对于m = n-1此时为菊花图,k需要满足 k > 3,n-1 < m < n(n-1)/2时为菊花图外有连结的点,此时k > 3
代码:
#include<bits/stdc++.h> using namespace std; int main() { int t; scanf("%d", &t); while(t--) { long long n, m, k; bool flag; scanf("%lld%lld%lld", &n, &m, &k); if(m < n-1 || m > n*(n-1)/2) flag = false; else if(n==1&&m==0&&k>1) flag = true; else if(m == n*(n-1)/2 && k > 2) flag = true; else if(n-1 <= m && m < n*(n-1)/2 && k > 3) flag = true; else flag = false; if(flag) printf("YES\n"); else printf("NO\n"); } return 0; }
标签:Diameter,false,题解,1581B,else,flag,&&,true From: https://www.cnblogs.com/lys-blogs123/p/17044651.html