POJ 1130 Alien Security

先用DFS把必經點找出來,然後取其中到入口長度最大的那個但是先用BFS求各點到入口的距離,從大到小排序,依次從大的開始檢驗是否為必經點,輸出找到的第一個,這樣卻WA了。。。對這道題還是沒有完全理解清楚。。。 AC代碼:(在原錯誤碼基礎上修改的,有點繁雜)#include<iostream>#include<queue>using namespace std;struct node{int d;int v;}dis[101];int g[101][101];int u[10

SOJ 3254 Windy和水星-水星交通

使n座城市間至少有兩座不連通,又全是帶權無向邊,即求圖的最小割,可以用Stoer-Wagner演算法解決 代碼:#include<iostream>using namespace std;const int inf=1<<30;const int MAX=510;int g[MAX][MAX];int MinCut(int n){int

POJ 1094 Sortint It All Out

一道拓撲排序的題,題目中給的A<B其實就是有向圖中一條由A指向B的邊,問你能否找到唯一的排序或者出現了環,或者到最後都不能找到唯一排序。題目意思一開始沒理解清楚,其實只要能判斷順序唯一或者有環,後面的輸入就不用管了採用檢測入度是否為0的方法進行拓撲排序,需要注意的是,若有多個入度為0的點,也可能存在環如這組資料:6 6A<BB<CC<FD<FE<FF<A結果為:Inconsistency found after 6

POJ 2139 Six Degrees of Cowvin Bacon

用Floyd算出每個點到其他點的最短路徑,再求每個點的平均值的100倍,取整形,100×g[i][0]/(n-1),我寫成了100×(g[i][0]/(n-1)),把小數部分本來要擴大的給省去了。。。貢獻2次WA 代碼:#include<iostream>using namespace std;int g[301][301];int d[301];void init(int n){int i,j;for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(

POJ 2112 OPtimal Milking

求各頭牛走過的最大值中的最小值求最小值中的最大值,最大值中的最小值什麼的可以用二分答案來做 每次二分一個結果mid後,將之間距離小於等於mid的牛奶機和奶牛連邊,容量為1,源點到每台牛奶機連邊,容量為m,然後每頭奶牛向匯點連邊,容量為1,如果最大流等於c,這個mid值就滿足條件,直到找到目標解  代碼:#include<iostream>#include<algorithm>using namespace std;#define MAX 250#define inf 99

POJ 2704 Pascal’s Travels

記憶化搜尋,反著搜比正著搜慢了不少,一個172MS,一個16MS 代碼:/*#include<iostream>using namespace std;__int64 map[40][40],f[40][40];int n;__int64 dfs(int i,int j){if(f[i][j])return f[i][j];if(i<1||i>n||j<1||j>n||map[i][j]==0)return 0;__int64

POJ 1966 Cable TV Network(證明有誤)

求圖的點連通度 點連通度的定義:一個具有N個點的圖G中,在去掉任意k-1個頂點後(1<=k<=N),所得的子圖仍然連通,去掉K個頂點後不連通,則稱G是K連通圖,K稱作圖G的連通度,記作K(G)。即去掉最少個數的點後,子圖不連通或者成為平凡圖 做法:拆點(無向無向邊拆成兩條有向邊),指定一個源點,枚舉匯點(如果匯點與源點不連通,則圖不連通),求使源匯不連通最少要移除的點數,並取最小值,如果最小值比n大,則最小值為n 詳情見:http://hi.baidu.com/lerroy312/b

POJ 2359 Questions

求約瑟夫環中最後一個出隊的初始編號有O(N)的簡便方法:http://www.cnblogs.com/woodfish1988/archive/2007/02/18/652251.html 由於資料比較大,採用刪除移位的方法逾時了。。。還有,這題輸入實在是噁心 代碼:#include<iostream>#include<memory.h>#include<string>#include<cstdio>#include<algorithm>

POJ 1698 Alice’s Chance

構圖很重要。。。每部電影作為一個源點,然後把每個星期的每一天看成一個點,每個點只可以貢獻一個工作日,即出邊(到匯點)的容量只能是1,而入邊的容量也為1,只要某部電影可以在該天工作,就可能選擇該天,即該部電影對應的點到該個工作日對應的點之間連一條線,最後,添加一個超級源點,它到每部電影對於的點之間的容量為該部電影需要的工作日(不能為無窮大)一開始把工作日與電影的關係對應反了,讓工作日去找電影,這樣節點個數就有50×20×7,太多了,實際上,電影在每一個工作日上都重複一次,何不讓電影去找工作日呢?這

1411 Calling Extraterrestrial Intelligence Again

根據題意,p*a<=100000,a/b<=p/q<=1,所以p<=q,因為1<=a,b<=1000,所以1/1000<=p/qp>=q/1000,又由於p*q<=100000,所以q*q<=10^8,q<t=sqrt(10^8)=10000,所以只要打10000以內的素數表,然後加點剪枝就可以了,一開始打了100000內的素數表,TLE了 代碼:#include<iostream>#include<cstdio

POJ 3164 Command Network

最小樹形圖,朱劉演算法,步驟見下:http://hi.baidu.com/goldengoatish/blog/item/a8e693d8aad5122611df9b2e.html/cmtid/0b36bd097aac9f980a7b8295 代碼:#include<iostream>#include<cmath>using namespace std;const int MAX=105;const double inf=99999999.9;int

POJ 3090 Visible Lattice Points

假設t[i]為x=y=i時可以看到的點數考慮x<y的情況,如果可以看到,那麼直線的斜率為y/x,且x,y互素,因為如果兩者不互素,令d=gcd(x,y)>1,那麼(x/d)/(y/d)這個點一定是之前可以看到的點,(x,y)就被遮住了 當x>y時,與x<y一樣,是對稱的 所以t[i]=t[i-1]+2*PHI[i],i=0時,t[i]=3 代碼:#include<iostream>#include<memory.h>#include<stri

POJ 1597 Uniform Generator

根據迴圈群的知識,step的產生群的周期為n/gcd(step,n),所以,只有當gcd(step,n)=1時,才是一個good choice 代碼:#include<iostream>#include<cstdio>#include<memory.h>using namespace std;__int64 gcd(__int64 a,__int64 b){if(b==0)return a;elsereturn gcd(b,a%b);}int main(){_

POJ 1012 Joseph

考驗思維能力的一道題一開始用了最笨的方法,一個一個數,結果k到10就跑不出來了 後來看了discuss,可以推公式,這樣就可以直接推得下一個殺人的位置,不必一個一個數了,時間可以節省非常多,自己找了小點的k嘗試了下,推出了公式,我們從點1開始編號,則初始情況一共有2*k個點假設b為已經殺掉的人數,now為現在的起始位置,next為下一個殺掉人的編號,初始時,b=now=0 則第一步,next=(0+m-1)%(2k-0)+1,(減1模數後再加1,為了防止0的出現),編號為next的人被殺掉,注意

POJ 2603 Brave Balloonists

求10個數的乘積的因子個數把10個數的乘積因式分解,得到p1^a1*p2^a2*...*pn^an因子個數為(1+a1)*(1+a2)*(1+a3)*...*(1+an)每個ai,它的取值可能為[0,ai],共有ai+1種取法 我用dfs求因子個數逾時了=。= 代碼:#include<iostream>#include<cstdio>#include<memory.h>#include<algorithm>using namespace

POJ 2263 Heavy Cargo

 與2253相似,這道題求起點到終點的各條通路中,權值最小邊的最大值Floyd與Dijkstra都可以做 代碼:#include<iostream>#include<map>#include<string>using namespace std;int g[201][201],d[201],u[201];int n,r;int max(int a,int b){return a>b?a:b;}int min(int a,int b){return

POJ 2349 Arctic Network

一開始題目意思沒理解清楚,以為最小產生樹中因衛星頻道可以刪除的邊的兩點都必須有衛星,這樣S個衛星頻道可以覆蓋幾個點就不確定了,變得很複雜 其實題目意思是將一棵最小產生樹轉化成一個森林,森林裡有S棵樹,每棵樹配一個衛星頻道,並且使得森林裡所有邊中最長的邊的長度最小 其實意思就是可以刪除最小產生樹中的S-1條邊,問剩下的邊中最長的是多少 由於建圖時每兩個點之間都有邊,是稠密圖,故用Prim法比較好 代碼:#include<iostream>#include<algorithm>

POJ 2496 Military Recruit

還是用Floyd求每對點間的最短路徑這道題學到了兩個小技巧對n*(n-1)*p/100向上取整,兩個方法i=ceil(n*(n-1)*p/100.0);需要<cmath>標頭檔或者i=n*(n-1)*p; i=i/100+(i%100!=0); 代碼:#include<iostream>#include<algorithm>#include<cmath>using namespace std;int g[101][101];int

POJ 2502 Subway

一道單源最短路徑,兩點間的距離除以速度作為邊上的權鬱悶的是居然TLE了,找了一個多小時,發現只要加一句system("pause")就可以了。。。不過WA了(其實應該數組開小了,200個stop加上家和學習,開到201不夠。。。又是細節問題)不過為什麼不直接報RE,加上那句才報呢。。。後來想了下,是算權的時候錯了,當起點或終點的y值與網站一樣時,應該按步行的速度算,但修改後還是WA了。。。後來參照別人的在讀資料時就算權,過了,唉。。。 代碼:#include<iostream>#in

POJ 2914 Minimum Cut

無向圖,每對頂點間可能有多條邊,問最少刪除多少條邊才能將圖分為兩個子圖 把兩點間的邊數看成權重,就變成了求帶權無向圖的最小割了,採用Stoer-Wagner演算法 代碼:#include<iostream>using namespace std;const int inf=1<<30;const int MAX=510;int g[MAX][MAX];int MinCut(int n){int

總頁數: 61357 1 .... 13163 13164 13165 13166 13167 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.