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

糯米

TI DaVinci, gstreamer, ffmpeg
隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
數據加載中……

POJ 3156 Interconnect 圖論+數論

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

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

如果把當前圖的狀態視為一個子問題
那么就可以用動態規劃解決問題了
圖的狀態可以表示為:有多少個連通分量,每個連通分量包含多少個點
比如說圖的狀態 (2, 3, 3) 表示有三個連通分量,每個連通分量包含的點的個數分別為 2, 3, 3

動態規劃的轉移方程為:
f = p*(1+r) + p*q*(2+r) + p*q^2*(3+r) ....
其中r為p發生后,新狀態的期望值
這個東西高中的時候學過,呵呵。

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

這樣程序就可以寫了。動態規劃保存每個圖的狀態。
如果用python寫,只要建立一個tuple到float的映射就可以了。非常方便。
java中也有List<int>到Double的映射。
c里面估計就得用hash了。

py代碼,參照標程寫的。


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
    


標程
用很簡潔的代碼寫了并查集,值得借鑒!

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 糯米 閱讀(666) 評論(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>
            亚洲高清视频的网址| 欧美bbbxxxxx| 亚洲欧洲另类| 免费视频一区二区三区在线观看| 伊人色综合久久天天| 美女国产一区| 免费亚洲一区二区| aa国产精品| 在线中文字幕一区| 欧美日韩一区二区在线观看| 亚洲小说欧美另类婷婷| 这里只有精品电影| 国产午夜亚洲精品不卡| 玖玖国产精品视频| 欧美成人一二三| 亚洲免费视频在线观看| 欧美一区二区免费| 亚洲欧洲日韩女同| 在线亚洲一区| 在线日韩视频| 一区二区三区视频在线| 国产一区二区欧美日韩| 亚洲精品1区2区| 国产精品视频福利| 欧美成人精品在线| 欧美日韩中文精品| 久久久久欧美| 欧美日韩在线影院| 另类国产ts人妖高潮视频| 欧美人体xx| 久久夜色精品国产欧美乱| 欧美日本乱大交xxxxx| 欧美在线视频观看| 欧美国产一区二区| 久久久久亚洲综合| 欧美日韩视频一区二区| 免费亚洲电影在线观看| 国产精品日日摸夜夜添夜夜av| 欧美成人午夜剧场免费观看| 国产精品国产馆在线真实露脸| 蜜臀a∨国产成人精品| 国产精品久久激情| 亚洲国产精品久久久久| 狠狠狠色丁香婷婷综合激情| 亚洲无限av看| 99精品国产福利在线观看免费 | 免费成年人欧美视频| 国产精品高清网站| 欧美顶级大胆免费视频| 国内精品久久久| 亚洲色图综合久久| 一卡二卡3卡四卡高清精品视频| 久久国内精品自在自线400部| 亚洲一区二区三区午夜| 欧美国产先锋| 亚洲国产精品va在线观看黑人| 国内精品嫩模av私拍在线观看| 亚洲一区二区精品在线观看| 中文在线不卡| 欧美日韩一区二区免费在线观看| 欧美激情女人20p| 亚洲第一综合天堂另类专| 欧美一区二区黄| 欧美一级在线视频| 国产精品美女久久| 一区二区三区www| 亚洲桃花岛网站| 国产精品久久久久久久一区探花| 亚洲六月丁香色婷婷综合久久| 亚洲精品免费在线| 欧美大片91| 亚洲免费电影在线观看| 99精品视频免费全部在线| 欧美成人69| 亚洲人成网站影音先锋播放| 亚洲精品四区| 欧美日韩午夜剧场| 亚洲午夜在线观看视频在线| 午夜精品福利在线| 国产精品资源在线观看| 欧美一级片在线播放| 久久夜色精品国产亚洲aⅴ| 伊人久久婷婷| 欧美激情第三页| 亚洲视频电影图片偷拍一区| 羞羞视频在线观看欧美| 激情成人av| 欧美国产精品专区| 中文精品99久久国产香蕉| 欧美在线亚洲在线| 亚洲国产精品va在看黑人| 欧美日韩国产va另类| 亚洲男女毛片无遮挡| 久久久久久久激情视频| 亚洲精品在线观看免费| 国产精品免费久久久久久| 久久久国产一区二区| 亚洲精品久久| 久久精品电影| 99在线热播精品免费| 国产麻豆视频精品| 欧美成人三级在线| 午夜精品久久| 亚洲国产精品久久久久婷婷老年| 亚洲欧美激情在线视频| 狠狠久久婷婷| 欧美香蕉视频| 蜜臀久久久99精品久久久久久| 亚洲一区二区免费看| 欧美激情一区二区三区成人| 亚洲欧美电影在线观看| 亚洲精品国精品久久99热一| 国产精品视区| 欧美88av| 久久精品91久久久久久再现| aaa亚洲精品一二三区| 欧美va天堂| 午夜欧美精品| 一本一本久久a久久精品综合妖精| 国产亚洲福利社区一区| 欧美日韩99| 久久婷婷人人澡人人喊人人爽| 亚洲天堂男人| 日韩视频在线播放| 亚洲国产精品黑人久久久| 久久久噜噜噜| 欧美在线关看| 亚洲欧美视频一区二区三区| 日韩视频免费观看高清完整版| 韩国在线一区| 好吊视频一区二区三区四区| 国产精品日韩欧美一区二区| 欧美日韩一区在线观看| 欧美xxxx在线观看| 裸体歌舞表演一区二区| 久久久久99| 久久久久www| 久久精品人人做人人综合| 亚洲一区二区视频| 亚洲素人在线| 亚洲伊人色欲综合网| 亚洲在线观看视频网站| 亚洲天堂免费观看| 亚洲午夜电影在线观看| 中国女人久久久| 亚洲图片欧洲图片av| 这里只有精品视频| 亚洲一二三区视频在线观看| 一区二区国产在线观看| 一本色道久久综合精品竹菊 | 亚洲激情中文1区| 欧美激情亚洲综合一区| 亚洲第一黄网| 亚洲精品一区二区三区蜜桃久| 亚洲精品久久7777| 9色porny自拍视频一区二区| 亚洲午夜精品久久久久久app| 这里只有精品电影| 午夜免费在线观看精品视频| 欧美在线观看www| 久久久久久亚洲综合影院红桃| 久久综合色播五月| 欧美成人性网| 国产精品国产福利国产秒拍| 国产亚洲成年网址在线观看| 国产一区清纯| 亚洲日本久久| 亚洲欧美日韩国产中文在线| 久久精品人人做人人爽电影蜜月 | 亚洲精品久久久久| 亚洲最新中文字幕| 亚洲欧美中文字幕| 久久综合色天天久久综合图片| 欧美成人在线免费观看| 日韩亚洲精品电影| 欧美在线免费观看视频| 欧美黑人在线播放| 国产精品免费看片| 亚洲国产精品成人综合色在线婷婷| 亚洲日本黄色| 欧美在线观看视频在线| 欧美国产日韩精品| 亚洲视频免费看| 免费欧美日韩| 国产日韩欧美91| av不卡在线看| 久久综合给合久久狠狠狠97色69| 亚洲精品一区二区三区四区高清| 欧美一级淫片播放口| 欧美金8天国| 影音先锋亚洲精品| 性色av一区二区三区在线观看| 亚洲国产成人精品久久| 午夜精品区一区二区三| 欧美日韩免费在线| 亚洲国产精品999| 久久久国产精彩视频美女艺术照福利| 亚洲精品国产无天堂网2021| 久久美女性网| 韩国一区二区三区在线观看|