這道題是並查集(union-find)應用。知道後就簡單了。之前已經多次寫過了。這裡用的是之前1703的程式。
剛開始用的dfs搜尋,超時了,看了discuss才知道是並查集。
thestoryofsnow
2236
accepted
196k
1079ms
c++1957b
/*
id: thestor1
lang: c++
task: poj2236
*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;
const int maxn = 1001;
void makeset(const int n, vector&parent, vector&rank)
}int find(int u, vector&parent)
return parent[u];
}void union_set(int u, int v, vector&parent, vector&rank)
if (rank[ru] < rank[rv])
else if (rank[rv] < rank[ru])
else }
int main()
for (int i = 0; i < n; ++i)
vectorparent(n), rank(n);
makeset(n, parent, rank);
char type;
while (scanf(" %c", &type) > 0)}}
repired[p] = true;
} else if (type == 's')
else
}} return 0;
}
2236解題報告
今天繼續練並查集,一路刷了好幾題,現在把做的幾個都補上.2236這道題主要考的是並查集,另外我用乙個陣列來儲存好的點來減少部分無謂的搜尋.include define connect x1,y1,x2,y2,max x1 x2 x1 x2 y1 y2 y1 y2 max max typedef st...
POJ2236 簡單並查集
poj2236 題目大意 有很多臺電腦,兩台電腦距離在d之內才能通訊,或者通過第三台電腦進行通訊。判斷兩台電腦能否通訊。0表示修復,s表示測試。題解 這是簡單的並查集,s的時候只要判斷兩台電腦是不是在乙個集合中就行,0將兩個點合併的時候注意要判斷距離是不是小於d。include include in...
poj 2236 並查集模板
題意 n台壞了的計算機放置在n個不同的位置,若兩台計算機的距離不超過d且兩台計算機都已修好,那麼這兩台計算機可以通訊。間接通訊也叫做通訊。現進行若干次操作,修計算機或查詢兩台計算機是否可通訊。查詢時判斷時候可通訊。題解 並查集 1.這個就是並查集模板題。2.憑藉著以往的記憶寫了乙個先是wa後是t,看...