日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

打击犯罪(信息学奥赛一本通-T1386)

發布時間:2025/3/17 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打击犯罪(信息学奥赛一本通-T1386) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目描述】

某個地區有n(n≤1000)個犯罪團伙,當地警方按照他們的危險程度由高到低給他們編號為1-n,他們有些團伙之間有直接聯系,但是任意兩個團伙都可以通過直接或間接的方式聯系,這樣這里就形成了一個龐大的犯罪集團,犯罪集團的危險程度由集團內的犯罪團伙數量唯一確定,而與單個犯罪團伙的危險程度無關(該犯罪集團的危險程度為n)。現在當地警方希望花盡量少的時間(即打擊掉盡量少的團伙),使得龐大的犯罪集團分離成若干個較小的集團,并且他們中最大的一個的危險程度不超過n/2。為達到最好的效果,他們將按順序打擊掉編號1到k的犯罪團伙,請編程求出k的最小值。

【輸入】

第一行一個正整數n。接下來的n行每行有若干個正整數,第一個整數表示該行除第一個外還有多少個整數,若第i行存在正整數k,表示i,k兩個團伙可以直接聯系。

【輸出】

一個正整數,為k的最小值。

【輸入樣例】

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

【輸出樣例】

1

【源程序】

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<set> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 1001 #define MOD 123 #define E 1e-6 using namespace std; struct node{int pre;int next; }a[N*N]; int father[N]; int head[N],ans[N]; int cnt; void add(int x,int y) {cnt++;a[cnt].pre=y;a[cnt].next=head[x];head[x]=cnt;cnt++;a[cnt].pre=x;a[cnt].next=head[y];head[y]=cnt; } int Find(int x) {if(father[x]==x)return x;return father[x]=Find(father[x]); } int main() {int n;cin>>n;for(int i=1;i<=n;i++){father[i]=i;ans[i]=1;int m;cin>>m;for(int j=1;j<=m;j++){int k;cin>>k;add(i,k);}}for(int i=n;i>=1;i--){int x=Find(i);int k=head[i];while(k!=0){int j=a[k].pre;if(j>i){int y=Find(j);if(x!=y){father[y]=x;ans[x]+=ans[y];if(ans[x]>n/2){cout<<i<<endl;return 0;}}}k=a[k].next;}}return 0; }

?

總結

以上是生活随笔為你收集整理的打击犯罪(信息学奥赛一本通-T1386)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。