Hi, I have a question related to MST.
Suppose that we are given a graph where we have limited knowledge of the edge weights: Example
Is it possible to find all edges that are contained in at least one MST?
Thank you...
# | 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 | 161 |
5 | djm03178 | 158 |
6 | -is-this-fft- | 157 |
7 | adamant | 155 |
8 | awoo | 154 |
8 | Dominater069 | 154 |
10 | luogu_official | 151 |
Hi, I have a question related to MST.
Suppose that we are given a graph where we have limited knowledge of the edge weights: Example
Is it possible to find all edges that are contained in at least one MST?
Thank you...
Name |
---|
The problem statement is unclear. Are we to decide if an edge exists in a MST for all possible configurations of the question marks? Or if that edge exists in a MST for at least one possible configuration?
In either case it is possible to modify Kruskal's algorithm.
Question mark means there is an edge but length of the edge is unknown!
Well yeah, but in that case there are edges which might be in at least one MST if the unknowns have favorable valuables, but which might also not be in a MST. Should we include those edges?
I guess we should not
We will first find out whether each edge with a known weight definitely exists in some MST, then whether each edge with an unknown weight definitely exists in some MST. Both cases can be handled with a modified variant of Kruskal's algorithm.
The worst case is when as many as possible edges with unknown values are in a MST. Let's make a DSU and add all the unknown edges to it. Now let's sort the edges with known weights by their weights and start processing the edges in blocks of equal weight. For each edge in a block, check if its endpoints are in different connectivity components (with the DSU), but don't merge them yet. If an edge's endpoints are in different connectivity components, the edge definitely exists in a MST. Once you've processed all the edges in a block, merge their endpoints in the DSU.
Now for the edges with unknown weights. Make a new DSU and merge the endpoints of all edges with known weights. An edge with an unknown weight definitely exists in at least one MST if its endpoints are in different connectivity components in the DSU.
The complexity of the first part is ; the complexity of the second part is , so the total complexity comes down to .
I believe what it means is that for each edge we need to determine if it's included in some MST, for any possible weights of the edges of the question marks.
For that we could just immediately give all these edges a weight 0.
Your comment is as ambiguous as the statement, but I see what you mean because of the weight 0 thing. Anyway we still need to consider when the edges with unknown weights are in any MST.