Codeforces Round #745 (Div. 2) B. Diameter of Graph
阿新 • • 發佈:2021-10-23
場上思路:發現存在兩種特殊情況:邊數最小的菊花樹和邊數最大的完全圖。但由於理解錯一般無向圖直徑的定義,不會處理介於菊花圖與完全圖之間的情況。此外,對於完全圖直徑為1和菊花圖直徑為2的性質理解的也不夠深刻。
改進:對於題目定義的新概念要思考,同時要注意積累特殊情況的性質(異或和、菊花圖等)。
#include<cstdio> #include<iostream> #define ll long long using namespace std; int main(){ int T; scanf("%d",&T); while(T--){ ll n,m,k; scanf("%lld%lld%lld",&n,&m,&k); //特殊情況判斷 if(n==1){ if(m==0&&k>=2){ printf("YES\n"); continue; }else{ printf("NO\n"); continue; } } if(m<n-1||m>(n*(n-1))/2||k<=2){//嚴格小於k-1,即<=k-2,1<=k-2,k=3 //完全不可能滿足條件(邊數和直徑要求) printf("NO\n"); continue; }else{ //恰好構成菊花圖 if(m==n-1&&k>=4){//4-1=3>2 printf("YES\n"); continue; }//一部分完全,一部分為菊花圖 else if(m>n-1&&m<(n*(n-1)/2)){//不完全菊花圖 if(k>=4){ printf("YES\n"); continue; }else{ printf("NO\n"); continue; } } else if(m==(n*(n-1)/2)&&k>=3){//完全圖 printf("YES\n"); continue; }else{ printf("NO\n"); continue; } } } return 0; }