並查集的一道題目,不知道為何有些部落格上說成是最小生成樹,也許最小生成樹也可以解決這個問題,坎坎坷坷打完了**,上交就tle,好菜啊,不過看了看自己的方法複雜度確實夠高的。
看了網上的**,乙個很好的想法:反向考慮,,路斷變路修,,,同一天的算乙個。。一句就解決了我的超時問題,當然對並查集也有一些改變的,,我覺得自己寫不出來。。
首先附自己的**,雖然tle,但是很好的幫助我理解了這個題目的解法。。
#include
#include
#include
using
namespace
std;
int n,m;
int pa[100010];
struct node
p[100010];
void init() //初始化 該函式可以根據具體情況儲存和初始化需要的內容
}int findset(int a) //不帶路勁壓縮
return a;
}void union_nodes(int a, int b) //集合合併
}int main()
int anss=0;
//printf("%d\n",maxn);
for(i=0;i<=maxn;i++)
for(k=1;k<=n;k++)
if(ans>change&&i!=0)
anss++;
}printf("%d\n",anss);
}return
0;}
#include
#include
#include
#include
#include
using
namespace
std;
int pre[100010],a[100010];
struct road
}s[100010];
void lol(int n)
int find(int x)//尋根
bool ok(int x,int y)//連線檢測
int main()
}printf("%d\n",num);
}return
0;}
nyoj 925 國王的煩惱(最小生成樹)
1 2 題意 n個城市中每兩個城市有多條路徑連線,可是因為路徑存在的天數是有限的!以為某條路經不存在了 3導致n個城市不能連通了,那麼村名們就會 問一共會有多少次 45 思路 最小生成樹.我們用最大邊來建立樹!只要有最大邊將節點連線並保證連通!那麼邊權小的值 6就可以忽略了!最後將生成樹中由 最大邊...
nyoj 925 國王的煩惱(最小生成樹)
題意 n個城市中每兩個城市有多條路徑連線,可是因為路徑存在的天數是有限的!以為某條路經不存在了 導致n個城市不能連通了,那麼村名們就會 問一共會有多少次 思路 最小生成樹.我們用最大邊來建立樹!只要有最大邊將節點連線並保證連通!那麼邊權小的值 就可以忽略了!最後將生成樹中由 最大邊組成的 去重 相同...
nyoj 925 國王的煩惱(最小生成樹)
題意 n個城市中每兩個城市有多條路徑連線,可是因為路徑存在的天數是有限的!以為某條路經不存在了 導致n個城市不能連通了,那麼村名們就會 問一共會有多少次 思路 最小生成樹.我們用最大邊來建立樹!只要有最大邊將節點連線並保證連通!那麼邊權小的值 就可以忽略了!最後將生成樹中由 最大邊組成的 去重 相同...