HDU 4324 拓撲排序

2021-07-26 19:51:22 字數 930 閱讀 9773

給出n個人的喜歡關係,mp[i][j] == 1表示i喜歡j,規定若a不喜歡b,則b一定喜歡a,問這些關係中是否存在三角戀的關係,即(a->b,b->c,c->a)。

題目的要求下,顯然任意兩個人之間一定有一條單向邊,那麼可以發現如果存在環,一定至少有乙個長度為3的環,畫一畫就能看出來。

所以這道題只需要判斷是否存在環即可,可以利用拓撲排序,也可以直接dfs搜環。

#include #include #include #include #include #include #include using namespace std;

const int maxn = 2005;

const int inf = 0x3f3f3f3f;

const double eps = 1e-6;

int indeg[maxn], seq[maxn];

vector g[maxn];

int topo(int n)

int k = 0;

bool res = false;

while (!q.empty())

} if (k < n) return -1; ///存在有向環,總之不能進行拓撲排序

if (res) return 0; ///可以進行拓撲排序,並且只有唯一一種方式,seq陣列即是排序完好的序列

return 1; ///可以進行拓撲排序,有多種情況,seq陣列是其中一種序列

} char mp[maxn][maxn];

int main()

}} printf("case #%d: ", ++cs);

if (topo(n) == -1) puts("yes");

else puts("no");

} return 0;

}

hdu 4324 拓撲排序

題目大意 就是拓撲排序判環,如果存在環的話輸出yes,不存在的話輸出no。一開始超時了,覺得是不是因為cin,cout。改了,果然變成wa了orzzzzz 後來發現錯在yes,no的輸出上面。打成了yes no。還有就是case的輸出也是錯了。感覺太過於急著想要ac這道水題了。反而貢獻了好多的錯。總...

hdu 拓撲排序歸納

拓撲排序,其本質是輸出乙個全序關係,對於按要求輸出給定關係的題目,一般就是按照題目要求實現這個全序關係,這種題時常會先給乙個偏序關係,然後給出剩下的元素如何建立關係 字典序之類的 如果忘了那幾個詞是啥意思.偏序關係 滿足自反,反對稱,傳遞性的關係 全序關係 乙個偏序關係r,且對任意x,y有xry或y...

hdu1285(拓撲排序)

拓撲排序簡單來說就是把乙個圖的所有節點排序,使得每一條有向邊 u,v 對應的u都排在v的前面。拓撲排序最大的用途就是判斷乙個有向圖是否有環,當然判斷還有一種方法就是floyd演算法。如果用鄰接表的話拓撲排序的時間複雜度是o n e 鄰接矩陣是o n 2 n表示頂點數,e表示邊數,floyd時間複雜度...