POJ 2513 解題報告

2021-07-03 03:36:25 字數 1282 閱讀 6885

這道題看著就是尤拉路徑的題目:度數為奇數點的個數是0或者2。但是又要考慮顏色間的聯通性,比如兩根棍子:(blue, blue), (red, red)。這種情況就是impossible.

看了discuss,解法也大同小異。基本就是用trie統計每種顏色的個數(即節點度數)。同時用並查集(union-find)檢測連通性:最後只能有一棵樹。trie也基本都是靜態預先分配的。開到500000以後應該就夠,這裡保險起見用的550000。

thestoryofsnow

2513

accepted

59068k

891ms

c++

/* 

id: thestor1

lang: c++

task: poj2513

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int maxc = 11;

const int maxn = 550000;

int trie[maxn][26], tsize = 1;

int t2d[maxn];

int degree[maxn], dsize = 1;

int parent[maxn];

int insert(char color, int root)

degree[t2d[root]]++;

return t2d[root];

} int next = *color - 'a';

if (trie[root][next] == 0)

return insert(color + 1, trie[root][next]);

}int find(int x)

return x;

}void union_set(int lhs, int rhs)

int main()

} int count = 0;

bool inconnected = false;

for (int i = 1; i < dsize; ++i)

}} if (inconnected)

else

}if (oddcnt != 0 && oddcnt != 2)

else

}return 0;

}

poj 2513(字典樹 尤拉通路)

題意 給你n個火柴棍,每個火柴棍頭和尾兩種顏色,問你是否存在能夠把這些火柴棍擺成一行的情況,兩個相連的火柴棍的顏色需要一樣 解題思路 最初的思路是用map標記顏色,然後把每種顏色看作點,每根火柴棍看作邊,求尤拉路徑,然後超時了。看了別人的寫法,想起來了自己還學過字典樹來著。然後用字典樹找就行了,快很...

poj解題報告 1328

不得不說,這題是讓我飽受折磨,畢竟第一次做貪心演算法,而且wa了好多次,幸好有學長的幫助,最終找到了問題所在,是在快排上是問題,double高位不可向int低位轉換,由於一開始強制轉換導致雖然樣例和其他的測試資料過了,但還是wa,現在改完了就對了,附上ac ps 這題通過率是22 真心不簡單 如下 ...

poj解題報告 2586

這題我是用的貪心演算法,其實不用也可以,列舉也能解決,因為情況不多。因為是每連續5個月必有虧損,而一年只有1 5,2 6,3 7,4 8 8 12共8種情況。現在設盈餘為s,虧損為d,可列出以下幾種情況。ssssdssssdss 4ssssddsssddss 3s 2d ssdddssdddss 2...