HDU1856_More is better
生活随笔
收集整理的這篇文章主要介紹了
HDU1856_More is better
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目大意: ??????? 讓你輸入n,然后輸入n組數(shù)據(jù),表示a與b的關(guān)系,最后求出關(guān)系最多一組的個(gè)數(shù)。注意(a與b有關(guān)系,b與c有關(guān)系,那么a與c就有關(guān)系) 解題思路: ??????? 并查集,開(kāi)一個(gè)結(jié)構(gòu)體用來(lái)存儲(chǔ)以當(dāng)前節(jié)點(diǎn)為跟節(jié)點(diǎn)的數(shù)目,最后再歷遍一次就可以得到最大值了。 吐吐槽: ??????? 有點(diǎn)兒蛋疼,遇到了2個(gè)疼疼的問(wèn)題,本來(lái)這是一道模板題啊,唉,問(wèn)題1:交這道題目的時(shí)候,一交TLE了,疼,沒(méi)有改,再交,居然ac了,而且時(shí)間為600ms,這……瞬間斯巴達(dá)化~ 問(wèn)題2:這個(gè)有點(diǎn)兒嚴(yán)重,我在程序里面一邊算并查集的num,的時(shí)候,順便求最大值,這樣錯(cuò),必須在最后從1->MAX歷遍一遍求最大值,這是為毛?現(xiàn)在沒(méi)時(shí)間,留著問(wèn)題,明天慢慢啃吧。。 #include
using namespace std;
const int MAX=10000005;
typedef struct n
{int pre;int num;n(int a=1) :num(a) {}
}N;N pe[MAX];
int find(int x)
{int r=x,j;while(pe[r].pre!=r)r=pe[r].pre;while(pe[x].pre!=r){j=pe[x].pre;pe[x].pre=r;x=j;}return r;
}
//int find(int x)//查
//{
// if(x!=pe[x].pre)
// {
// pe[x].pre=find(pe[x].pre);
// }//回溯
// return pe[x].pre;
//}
void init()
{for(int i=0;i>n){init();int max=-1; for(i=1;i<=n;i++){cin>>a>>b;int f1=find(a);int f2=find(b);if(f1!=f2){pe[f2].pre=f1;pe[f1].num+=pe[f2].num;}/* if(pe[f1].num>max)//為什么不能這樣求最大值,還是搞不懂max=pe[f1].num;*/}for(i=1;imax)max=pe[i].num;}cout<
轉(zhuǎn)載于:https://www.cnblogs.com/cchun/archive/2011/11/09/2520179.html
總結(jié)
以上是生活随笔為你收集整理的HDU1856_More is better的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 人工鱼群算法python实现
- 下一篇: Revit导入CAD翻模丨CAD图层管理