タイトル説明
新規コロナウイルス肺炎(コロナウイルス病2019、COVID- 19)は、 肺炎によって引き起こさ2019新規コロナウイルス感染を意味する「新しいクラウン肺炎」と呼ばれます。
場合はグループに感染した人が、その後、このグループの必要性を単離することにします!
小さな生徒が新しいクラウン感染症と診断された、とマスクを着用していません!!!!!!
リスク!!!
時間が不足しています!!!!
学生を介してすべての学生や小規模A直接または間接的な接触を可能な限り迅速に見つける必要がある、彼らはより広い範囲の拡大を防ぐために隔離されます。
我々はすべて知っているように、学生のコミュニケーションが小グループであってもよく、学生はまた、複数の小グループに参加することができます。
解決するためにプログラムを書いてください!マスクを着用してください!!
入力フォーマットの
各試験のために複数のデータセット:
最初の二つの整数n及び行動M Mは、学生のグループの数であり、(N = M = 0は、入力の終了を示す処理する必要がない)、nは学生の数です。0 <N <= 3E4、0 <= M <= 5E2
〜N-1 0の学生数
少数0
そして、m行、それぞれの人、すなわち整数NUM小グループの数を有しています。小グループの学生を表す整数NUMが続きます。
出力形式
、出力アイソレーション数、回答がライン毎の各データの出力であります
ケースを入力します。
100 4
2 1 2
5 10 13 11 12 14
2 0 1
2 99 2
200 2
1 5
5 1 2 3 4 5
1 0
0 0
出力ケース
4
1
1
アイデアの分析
この質問には存在しないので、実際には、今、何の学校はありません(エスケープ
実際には、あなたはすぐに話題を乗り越えることができ、これは互いに素セットであることがわかりました。
全体のプロセスは、「リーダー」のすべてのポイントを見つけることですので、個人的に私はすべて同じ「リーダー」はコミュニティである必要があり、「父探しセット」と呼ば互いに素セットを好みます。
アイデアがあること、非常にはっきりしているので、入力されたデータは、父親の事を探しています。
回避タイムアウトに、より迅速な(武士)を見つけるために父から、経路最適化を使用することを忘れないでください
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int father[30002];
int rnk[30002];
int findfather(int x)//找爹
{
if (x == father[x]) return x;
else return father[x] = findfather(father[x]);//优化路径
}
void Union(int a, int b)//认爹
{
a = findfather(a);
b = findfather(b);
if (a == b) return;
/*if (rnk[a] > rnk[b]) father[b] = a, rnk[a] = (rnk[b] += rnk[a]);
else father[a] = b, rnk[b] = (rnk[a] += rnk[b]);*/
//上面是用来维护生成树的秩的
father[b] = a;
}
int main()
{
int n, m;
while (cin >> n >> m)
{
if (n == 0 && m == 0) break;
for (int i = 0; i < n; i++)
{
father[i] = i;
rnk[i] = 1;
}
int num, j1, jx;
for (int i = 0; i < m; i++)
{
cin >> num;
for (int j = 0; j < num; j++)
{
if (j == 0)
{
cin >> j1;
continue;
}
else
{
cin >> jx;
Union(j1, jx);
}
}
}
for (int i = 0; i < n; i++)
{
father[i] = findfather(i);
}
int t = father[0];
int ans = 0;
for (int i = 0; i < n; i++)
{
if (father[i] == t) ans++;
}
cout << ans << endl;
}
}