I was trying to solve this problem in Egyptian ECPC but I couldn't. Can anyone give me a hint ?
someone who already solved it said that he use disjoint set but I couldn't handle it using disjoint set .
# | User | Rating |
---|---|---|
1 | tourist | 3985 |
2 | jiangly | 3814 |
3 | jqdai0815 | 3682 |
4 | Benq | 3529 |
5 | orzdevinwang | 3526 |
6 | ksun48 | 3517 |
7 | Radewoosh | 3410 |
8 | hos.lyric | 3399 |
9 | ecnerwala | 3392 |
9 | Um_nik | 3392 |
# | User | Contrib. |
---|---|---|
1 | cry | 169 |
2 | maomao90 | 162 |
2 | Um_nik | 162 |
4 | atcoder_official | 160 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | Dominater069 | 154 |
8 | awoo | 154 |
10 | luogu_official | 150 |
I was trying to solve this problem in Egyptian ECPC but I couldn't. Can anyone give me a hint ?
someone who already solved it said that he use disjoint set but I couldn't handle it using disjoint set .
Name |
---|
The problem is asking for the maximum spanning tree of the graph where the edge costs between any two numbers in the array is their gcd.
Iterate of all possible gcd's from largest to smallest and consider them your edge costs. At any point you can union all numbers which are divisible by this gcd as long as they weren't connected earlier.
If you process it correctly, it's fast enough.
My solution to help you understand the idea better : https://ideone.com/Vbkhnw