snoi多校模擬賽 1 18 t2 clique

2021-08-14 18:57:12 字數 1608 閱讀 9228

b最大團(clique.pas/c/cpp)

tl:3s  ml:512mb

【description】

給定二維座標上的n個點,如果兩個點之間的距離大於k,則他們不能同時被選取。

求最大團的大小。也即,選出最多點,使得這些點兩兩之間的距離不大於k。

【input】

多組測試,第一行乙個整數t,表示資料的組數。

之後t組資料,每組資料第一行兩個非負整數n, k。

之後n行,每行兩個整數,表示點的座標。

【output】

共t行,每行乙個整數,表示最大團的大小。

【sample input】

25 20

0 00 2

100 100

100 110

100 12041

0 00 1

1 01 1

【sample output】

【hint】

20%:n <= 20

40%:n<=50

100%

:n<=100,0<=k<=10000,所有輸入座標的絕對值不超過10000。t<=10。

這道題需要的是幾何建模而不是圖論建模,如果你想的是完全圖,那麼恭喜gg。

每次如果列舉兩個點,以k為半徑畫圓,兩圓的交部分中的所有點與兩圓的距離都在k以內,所以我們只需要知道兩圓交部分內的點的距離是否滿足。

我們連線兩圓圓心,分成兩部分,兩部分內的點都不會距離大於k,但是跨連線就有可能,這時候就需要圖論建模了。

二分圖,顯而易見。

我們列舉找出超距離的點加入二分圖內,跑一邊最大匹配,用原來的點數+2-最大匹配數即為這次的答案,取max即可

特判:僅有1個點

ans初值賦為-1即可避免特判。

真的要%想出這個方法的julao,太玄了。

**:

#include using namespace std;

#define ll long long

int read()

while(c>='0' && c<='9')

return sum*f;

}struct p

p[305];

p operator-(p a,p b);}

int dis(p a)

int delta(p a,p b)

int t,n,k,ans,match[305],e[305][305],vis[305],l,r,l[305],r[305];

bool dfs(int now)

} return 0;

}int hungry()

return res;

}int main()

for(int k=1;k<=l;k++)

for(int o=1;o<=r;o++)

e[k][o]=0;

for(int k=1;k<=l;k++)

for(int o=1;o<=r;o++)

if(dis(p[l[k]]-p[r[o]])>k*k)

e[k][o]=1;

ans=max(ans,l+r-hungry());

}printf("%d\n",ans+2);

}}

snoi多校模擬賽 1 16 t2

原題 bzoj2900 time limit 10 sec memory limit 512 mb submit 99 solved 59 submit status discuss tk在虐題的同時,也喜歡玩遊戲。現在,有這樣的乙個遊戲,規則是這樣的 先隨機給出乙個數字n,然後你在操場上把1到n的...

SNOI省選模擬賽 dat1t3 tree

題意 給定一棵n個點 n 1條邊的樹,樹上的第i條邊有權值w i q次詢問,每次詢問為下列兩種操作之一 1 增加乙個點對 x,y。2 查詢第x條邊權值為y時所有點對之間的距離的最大值。題解 還沒完全想清楚,先占個坑,最近來補。下附暫時沒有想清的ac的 include include include ...

NOIP2018校模擬賽 T1 階乘

有n個正整數a i 設它們乘積為p,你可以給p乘上乙個正整數q,使p q剛好為正整數m的階乘,求m的最小值。共兩行。第一行乙個正整數n。第二行n個正整數a i 共一行乙個正整數m。16 看到這個題目描述只有一行我心頭就湧上一股不祥的預感 一般這種題 都比較 那啥 是的,這個題我又寫炸了 好的讓我們來...