#團,構造#洛谷 3524 [POI2011]IMP-Party
阿新 • • 發佈:2022-04-14
題目
有一個 \(3n\) 個點的無向圖,保證有一個大小為 \(2n\) 的團,輸出一個大小為 \(n\) 的團
分析
每次選擇兩個不相連的點刪掉,那麼剩下的 \(n\) 個點一定是團,
因為每次至少有一個不在大小為 \(2n\) 的團中的點被刪除,所以剩下的點一定在團中。
但是隻是最多刪除 \(n\) 次,所以輸出完 \(n\) 個點後及時退出。
程式碼
#include <cstdio> #include <cctype> using namespace std; const int N=3011; int n,ans; bool kick[N],a[N][N]; int iut(){ int ans=0; char c=getchar(); while (!isdigit(c)) c=getchar(); while (isdigit(c)) ans=ans*10+c-48,c=getchar(); return ans; } int main(){ n=iut(); for (int T=iut();T;--T){ int x=iut(),y=iut(); a[x][y]=a[y][x]=1; } for (int i=1;i<=n;++i) if (!kick[i]){ for (int j=i+1;j<=n;++j) if (!kick[j]&&!a[i][j]){ kick[i]=kick[j]=1; break; } } for (int i=1;i<=n;++i) if (!kick[i]){ printf("%d ",i); if (++ans==n/3) break; } return 0; }