hdu1232 暢通工程

2021-06-08 01:07:17 字數 1512 閱讀 9991

還是並查集,不過我覺得最後判斷最少路徑自己處理的麻煩了,得去看看大神**.......

code:

/*

id: yueqiq

prog: numtri

lang: c++

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define si set#define ll long long

#define pb push_back

#define ps printf(" ")

#define vi vector#define ln printf("\n")

#define lson l,m,rt << 1

#define rson m+1,r,rt<<1|1

#define sd(a) scanf("%d",&a)

#define pd(a) printf("%d",a)

#define set(a,b) memset(a,b,sizeof(a))

#define ff(i,a) for(int i(0);i<(a);i++)

#define fd(i,a) for(int i(a);i>=(1);i--)

#define for(i,a,b) for(int i(a);i<=(b);i++)

#define fod(i,a,b) for(int i(a);i>=(b);i--)

#define readf freopen("input.txt","r",stdin)

#define writef freopen("output.txt","w",stdout)

const int maxn = 1001;

const int inf = 0x3fffffff;

const int dx=;

const int dy=;

const double pi = acos(-1.0);

using namespace std;

int n,m;

bool use[maxn];

int num[maxn],pre[maxn];

void make_set(int k)

int find_set(int k)

return pre[k];

}//union the set of x,y

void union_set(int x,int y)else

}int main()

int k=0;

for(i,1,n)

}//puts("------------------------");

pd(k-1);ln;

//puts("------------------------");

}return 0;

}

HDU 1232 暢通工程

題目大意 中文題 解題思路 最基礎的並查集,注意一點,雖然路徑優化了,但pre i 不一定就是最上級,所以最後查詢還得用find函式。該部落格詳盡的多 ac include include using namespace std int n,m,t1,t2,pre 1005 setse intfin...

HDU 1232 暢通工程

這題就是並查集的應用,我們可以假設n個城鎮之間皆無道路,那就要修建n 1條道路。每當我們已知兩個城鎮之間是連通的時候,我們就可以讓cnt 1,因為我們沒必要修建道路了。這樣的話我們就不用再壓縮路徑,判斷有多少的集合了。需要注意的一點是,對於並查集的連線,我們應該把它的祖先連線在一起,而不是把它們連線...

HDU 1232 暢通工程

題意很清楚,我們來分析下例子 第一行告訴你,一共有4個點,2條路。下面兩行告訴你,1 3之間有條路,4 3之間有條路。那麼整幅圖就被分成了1 3 4和2兩部分。只要再加一條路,把2和其他任意乙個點連起來,暢通工程就實現了,那麼這個這組資料的輸出結果就是1。那該怎麼辦呢?可以運用上週學的並查集啊!給每...