青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

糯米

TI DaVinci, gstreamer, ffmpeg
隨筆 - 167, 文章 - 0, 評(píng)論 - 47, 引用 - 0
數(shù)據(jù)加載中……

POJ 3156 Interconnect 圖論+數(shù)論

題目的意思是:
給一個(gè)有n個(gè)點(diǎn),m條邊的無(wú)向圖
兩點(diǎn)之間可以存在多條邊
現(xiàn)在每次隨機(jī)增加一條邊
問(wèn)使得全部點(diǎn)都連通需要增加多少次(期望值)

首先,求出所有連通分量。用并查集。
每次隨機(jī)增加一條邊的時(shí)候一共有兩種情況:
1)這條邊連接了兩個(gè)不同的連通分量,它的概率是p
2)這條邊在一個(gè)連通分量里,它的概率是q = 1 - p
前者可以改變連通分量的數(shù)量,后者不能

如果把當(dāng)前圖的狀態(tài)視為一個(gè)子問(wèn)題
那么就可以用動(dòng)態(tài)規(guī)劃解決問(wèn)題了
圖的狀態(tài)可以表示為:有多少個(gè)連通分量,每個(gè)連通分量包含多少個(gè)點(diǎn)
比如說(shuō)圖的狀態(tài) (2, 3, 3) 表示有三個(gè)連通分量,每個(gè)連通分量包含的點(diǎn)的個(gè)數(shù)分別為 2, 3, 3

動(dòng)態(tài)規(guī)劃的轉(zhuǎn)移方程為:
f = p*(1+r) + p*q*(2+r) + p*q^2*(3+r) ....
其中r為p發(fā)生后,新?tīng)顟B(tài)的期望值
這個(gè)東西高中的時(shí)候?qū)W過(guò),呵呵。

而1)中也包含多種情況,需要兩兩枚舉
最大的問(wèn)題是,f的值是一個(gè)無(wú)限數(shù)列,它的極值很難求。但無(wú)論如何,有高手求出來(lái)了。。在這里:http://archive.cnblogs.com/a/1325929/
它的極值是 f = p * (1 / (1 - q) + r) / (1 - q)
我對(duì)照了一下標(biāo)程,確實(shí)是這個(gè)。
后來(lái)我自己推導(dǎo)了一下,發(fā)現(xiàn)它可以化成多個(gè)等比數(shù)列相加的形式,求和后,發(fā)現(xiàn)當(dāng)n趨向于無(wú)窮大的時(shí)候,它的極限就是上面這個(gè)公式。
(注意:i*q^i,  當(dāng)0<q<1,i趨向于無(wú)窮大的時(shí)候等于0)

這樣程序就可以寫(xiě)了。動(dòng)態(tài)規(guī)劃保存每個(gè)圖的狀態(tài)。
如果用python寫(xiě),只要建立一個(gè)tuple到float的映射就可以了。非常方便。
java中也有List<int>到Double的映射。
c里面估計(jì)就得用hash了。

py代碼,參照標(biāo)程寫(xiě)的。


fi 
= open('in')
fo 
= open('out')
dp 
= {():0}
ti 
= 0

def get(s):
    
if s in dp:
        
return dp[s]
    q 
= sum([i*(i-1for i in s])*1.0/2/nn
    res 
= 0
    
for i in range(len(s)):
        
for j in range(len(s)):
            
if i < j:
                l 
= list(s)
                
del l[max(i,j)]
                
del l[min(i,j)]
                l.append(s[i]
+s[j])
                l.sort()
                r 
= get(tuple(l))
                p 
= s[i]*s[j]*1.0/nn
                res 
+= p*(1+r-r*q)/pow(1-q,2)
    dp[s] 
= res
    
return res

while 1:
    a 
= fi.readline().split()
    
if a == None or len(a) != 2:
        
break
    N, M 
= int(a[0]), int(a[1])
    nn 
= N*(N-1)/2
    s 
= [ i for i in range(N) ]
    
for i in range(M):
        u, v 
= [ int(i) for i in fi.readline().split() ]
        u 
-= 1
        v 
-= 1
        k 
= s[u]
        
for j in range(N):
            
if s[j] == k:
                s[j] 
= s[v]
    ss 
= [ s.count(i) for i in set(s) ]
    ss.sort()
    
print '----', ti
    mine 
= get(tuple(ss))
    ans 
= float(fo.readline().strip())
    
print 'mine', mine, 'ans', ans
    
print len(dp)
    ti 
+= 1
    


標(biāo)程
用很簡(jiǎn)潔的代碼寫(xiě)了并查集,值得借鑒!

import java.util.*;
import java.io.File;
import java.io.PrintWriter;
import java.io.FileNotFoundException;

public class interconnect_pm {

    
private static int nn;

    
public static void main(String[] args) throws FileNotFoundException {
        Scanner in 
= new Scanner(new File("in"));
        PrintWriter out 
= new PrintWriter("ans.out");
        
int n = in.nextInt();
        nn 
= (n * (n - 1)) / 2;
        
int m = in.nextInt();
        
int[] p = new int[n];
        
for (int i = 0; i < n; i++) p[i] = i;
        
for (int i = 0; i < m; i++) {
            
int u = in.nextInt();
            
int v = in.nextInt();
            u
--;
            v
--;
            
int k = p[u];
            
for (int j = 0; j < n; j++) {
                
if (p[j] == k) {
                    p[j] 
= p[v];
                }
            }
        }
        List
<Integer> st = new ArrayList<Integer>();
        
for (int i = 0; i < n; i++) {
            
int s = 0;
            
for (int j = 0; j < n; j++) {
                
if (p[j] == i) s++;
            }
            
if (s > 0) {
                st.add(s);
            }
        }
        Collections.sort(st);
        List
<Integer> fn = new ArrayList<Integer>();
        fn.add(n);
        mem.put(fn, 
0.0);
        out.println(get(st));
        System.out.println(mem.size());
        out.close();
    }

    
static Map<List<Integer>, Double> mem = new HashMap<List<Integer>, Double>();

    
private static double get(List<Integer> st) {
        Double ret 
= mem.get(st);
        
if (ret != nullreturn ret;
        
int m = st.size();
        
int[][] a = new int[m][m];
        
for (int i = 0; i < m; i++) {
            
for (int j = i + 1; j < m; j++) {
                a[i][j] 
= st.get(i) * st.get(j);
            }
        }
        
int s = 0;
        
for (int i = 0; i < m; i++) {
            s 
+= st.get(i) * (st.get(i) - 1/ 2;
        }
        
double res = 0;
        
for (int i = 0; i < m; i++) {
            
for (int j = i + 1; j < m; j++) {
                List
<Integer> ss = new ArrayList<Integer>(st.size() - 1);
                
boolean q = true;
                
int z = st.get(i) + st.get(j);
                
for (int k = 0; k < m; k++) {
                    
if (k != i && k != j) {
                        
int zz = st.get(k);
                        
if (q && zz >= z) {
                            q 
= false;
                            ss.add(z);
                        }
                        ss.add(zz);
                    }
                }
                
if (q)
                    ss.add(z);
                
double p = a[i][j] * 1.0 / (nn - s);
                
double e = a[i][j] * 1.0 / ((1 - s * 1.0 / nn) * (1 - s * 1.0 / nn) * nn);
                e 
= e + get(ss) * p;
                res 
+= e;
            }
        }
        System.out.println(st);
        mem.put(st, res);
        
return res;
    }

}


posted on 2011-02-19 11:01 糯米 閱讀(658) 評(píng)論(0)  編輯 收藏 引用 所屬分類: POJ

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久999国产| 亚洲成色777777女色窝| 亚洲成人在线视频播放| 日韩网站在线观看| 日韩一区二区高清| 国产亚洲美州欧州综合国| 国产精品视频一二三| 欧美激情中文字幕乱码免费| 久久久久久网址| 亚洲激情小视频| 999在线观看精品免费不卡网站| 亚洲第一天堂无码专区| 亚洲国产精品久久人人爱蜜臀 | 久久九九免费视频| 欧美国产精品一区| 一区二区三区四区国产| 樱花yy私人影院亚洲| 亚洲精品网址在线观看| 亚洲国产天堂久久国产91| 亚洲欧洲免费视频| 一本色道久久综合一区 | aa亚洲婷婷| 午夜精品网站| 亚洲福利视频专区| 亚洲一区在线播放| 女人天堂亚洲aⅴ在线观看| 欧美午夜剧场| 亚洲高清视频一区| 亚洲精品久久嫩草网站秘色| 香港久久久电影| 亚洲国产导航| 欧美有码在线观看视频| 欧美极品一区| 一区二区亚洲| 欧美一区2区三区4区公司二百| 久久亚洲高清| 亚洲一区二区三区免费观看| 欧美黄色片免费观看| 黑人一区二区| 欧美激情bt| 国产精品区一区| 99视频精品在线| 久久在线免费观看视频| 一本综合久久| 欧美国产三级| 91久久极品少妇xxxxⅹ软件| 久久国产精品久久精品国产| 99re这里只有精品6| 免费成人黄色| 在线欧美日韩精品| 久久精品国产久精国产爱| 在线视频亚洲欧美| 欧美日韩一级大片网址| 一区二区三区高清在线观看| 亚洲第一精品久久忘忧草社区| 久久久久久9| 国内成人精品一区| 久久免费视频这里只有精品| 午夜精品区一区二区三| 国产女人18毛片水18精品| 欧美一区二区网站| 欧美一区二区三区电影在线观看| 国产乱人伦精品一区二区| 性欧美xxxx大乳国产app| 亚洲免费一在线| 国产一区二区三区在线观看视频| 久久久久久尹人网香蕉| 久久深夜福利| 亚洲精品资源| 亚洲伊人久久综合| 亚洲精品乱码久久久久久黑人 | 欧美成人免费视频| 亚洲免费av观看| 亚洲精品一区二区三区99| 欧美激情第五页| 亚洲欧洲在线播放| 久久久久久久999| 亚洲国产成人精品久久久国产成人一区 | 亚洲婷婷在线| 国产日韩欧美精品一区| 久久亚洲二区| 欧美激情第一页xxx| 亚洲综合成人在线| 欧美一区二区三区在线观看视频 | 黄色成人av在线| 欧美国产日韩免费| 欧美午夜精品久久久久久久| 欧美在线免费播放| 欧美成人综合一区| 欧美一区二区三区视频免费| 久久久水蜜桃| 亚洲视频一二三| 久久久噜噜噜久久| 亚洲图片欧美午夜| 久久精品视频亚洲| 一区二区三区四区精品| 欧美一区二区三区在线免费观看| 在线观看国产成人av片| 99精品欧美一区二区蜜桃免费| 国产亚洲制服色| 日韩亚洲欧美成人| 亚洲高清视频在线观看| 亚洲综合社区| 宅男精品视频| 久久永久免费| 午夜精品视频在线| 欧美裸体一区二区三区| 老鸭窝91久久精品色噜噜导演| 欧美日韩免费一区| 亚洲成色www久久网站| 国产精品毛片| 亚洲精品一区在线观看| 在线欧美小视频| 亚洲欧美日韩一区| 亚洲一区二区三区四区视频| 欧美韩国一区| 欧美大片91| 经典三级久久| 欧美中文字幕在线视频| 亚洲欧美一区在线| 欧美午夜片在线免费观看| 91久久久在线| 亚洲人成网在线播放| 久久精品首页| 久久久www成人免费无遮挡大片| 国产精品vip| 亚洲最快最全在线视频| 一区二区三区精品在线| 欧美精品一区二区在线播放| 欧美成人资源网| 亚洲国产成人av在线| 久久中文字幕一区| 欧美好骚综合网| 亚洲国产小视频| 男人的天堂成人在线| 一区二区在线免费观看| 久久久999精品| 久久综合一区二区三区| 一区二区三区视频观看| 亚洲精品欧美| 欧美成人精品在线观看| 欧美国产视频在线| 亚洲激情视频在线| 欧美精品自拍| 99精品欧美一区| 亚洲综合视频1区| 国产精品久久国产精品99gif| 日韩视频免费在线观看| 亚洲神马久久| 国产精品视频观看| 欧美亚洲三区| 欧美a级在线| 日韩视频不卡中文| 国产精品二区在线观看| 亚洲一区精品视频| 久久久久久久久久久成人| 国内精品福利| 蜜臀va亚洲va欧美va天堂| 亚洲国产婷婷综合在线精品| 亚洲国产三级网| 欧美精品综合| 亚洲欧美影院| 欧美国产精品v| 亚洲网站啪啪| 国产一区二区三区高清播放| 欧美中文字幕视频| 91久久午夜| 欧美在线|欧美| 亚洲国产视频直播| 国产精品成人一区二区| 久久精品欧美日韩| 亚洲精品影视在线观看| 久久成人免费网| 亚洲乱码国产乱码精品精 | 欧美成人亚洲成人日韩成人| 日韩视频久久| 国产日韩在线一区| 欧美激情欧美狂野欧美精品| 亚洲性夜色噜噜噜7777| 欧美成人中文字幕在线| 亚洲综合第一| 91久久精品国产91久久| 国产日韩欧美高清免费| 欧美看片网站| 久久资源在线| 中日韩美女免费视频网址在线观看 | 国产精品www| 久久成人免费电影| 亚洲精品影院| 欧美激情精品久久久久久蜜臀| 亚洲欧美激情视频| 亚洲精品美女免费| 亚洲成在线观看| 国产一区二区欧美| 国产精品青草久久| 欧美精品v日韩精品v韩国精品v| 在线精品国产欧美| 欧美久久久久久久| 亚洲在线国产日韩欧美| 欧美激情一二区|