解題心得
disjoint set 練習。
完成 union(a,b), find_set(v), same_set(u, v) 就差不多能過了,只是 find_set 可以再進一步優化。
程式碼
#include <iostream>
using namespace std;
int n, m, q, f[10001] = { 0 };
void Union(int a, int b)
{
f[a] = b;
}
int find_set(int v)
{
while (f[v] != v)
v = f[v];
return f[v];
}
bool same_set(int a, int b)
{
return find_set(a) == find_set(b);
}
int main()
{
int a, b;
cin >> n >> m >> q;
for (int i = 1; i <= n; i++)
f[i] = i;
while (m--)
{
cin >> a >> b;
Union(find_set(a), find_set(b));
}
while (q--)
{
cin >> a >> b;
if (same_set(a, b))
cout << ":)" << endl;
else
cout << ":(" << endl;
}
return 0;
}
沒有留言:
張貼留言