POJ 2458 解題報告

2021-06-27 15:13:19 字數 1452 閱讀 4089

剛開始用的是quick-select選取第n - 1小的邊,感覺挺有道理的,沒有意識到前n-1小的邊可能會構成環。所以這道題還是要求最小生成樹,然後裡面的邊就保證能夠將所有的點都連線起來。最小生成樹裡面最大的那條邊即為所求。

2485

accepted

788k

235ms

c++2953b

/* 

id: thestor1

lang: c++

task: poj2485

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

int quickselect(vector&dis, int k)

while (dis[j] > pivot)

if (i < j)

else

}int tmp = dis[left];

dis[left] = dis[j];

dis[j] = tmp;

if (j - left + 1 == k)

else if (j - left + 1 < k)

else

}assert (false);

return -1;

}void makeset(const int n, std::vector&parent, std::vector&rank)

}int find(int u, std::vector&parent)

return parent[u];

}void union_set(int u, int v, std::vector&parent, std::vector&rank)

if (rank[ru] < rank[rv])

else if (rank[rv] < rank[ru])

else }

class edge

edge(int u, int v, int w) : u(u), v(v), w(w) {}

bool operator< (const edge &rhs) const

return this->u < rhs.u || (this->u == rhs.u && this->v < rhs.v);

}};int kruskal(const int n, std::vector&edges)

} }assert (false);

return -1;

}int main()

}} int mst = kruskal(n, edges);

cout << mst << endl; }

return 0;

}

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...

poj解題報告 2635

這題特別好理解,就是 坑啊。題意就是給乙個數,這個數是兩個大素數的積,再給出乙個數,如果最小的素數比給的數大,列印good,否則列印bad和最小的素數。這題用的方法是高精度求模 同餘模定理。還有素數打表,把10 6內的素數全部預打表,在求模時則列舉到小於l為止。注意打表不能只打到100w,要保證素數...