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

oyjpArt ACM/ICPC算法程序設計空間

// I am new in programming, welcome to my blog
I am oyjpart(alpc12, 四城)
posts - 224, comments - 694, trackbacks - 0, articles - 6

PKU1511 Invitation Cards

Posted on 2007-01-02 16:10 oyjpart 閱讀(1606) 評論(2)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽

Invitation Cards
Time Limit:3000MS? Memory Limit:65536K
Total Submit:241 Accepted:93

Description
In the age of television, not many people attend theater performances. Antique Comedians of Malidinesia are aware of this fact. They want to propagate theater and, most of all, Antique Comedies. They have printed invitation cards with all the necessary information and with the programme. A lot of students were hired to distribute these invitations among the people. Each student volunteer has assigned exactly one bus stop and he or she stays there the whole day and gives invitation to people travelling by bus. A special course was taken where students learned how to influence people and what is the difference between influencing and robbery.

The transport system is very special: all lines are unidirectional and connect exactly two stops. Buses leave the originating stop with passangers each half an hour. After reaching the destination stop they return empty to the originating stop, where they wait until the next full half an hour, e.g. X:00 or X:30, where 'X' denotes the hour. The fee for transport between two stops is given by special tables and is payable on the spot. The lines are planned in such a way, that each round trip (i.e. a journey starting and finishing at the same stop) passes through a Central Checkpoint Stop (CCS) where each passenger has to pass a thorough check including body scan.

All the ACM student members leave the CCS each morning. Each volunteer is to move to one predetermined stop to invite passengers. There are as many volunteers as stops. At the end of the day, all students travel back to CCS. You are to write a computer program that helps ACM to minimize the amount of money to pay every day for the transport of their employees.

Input
The input consists of N cases. The first line of the input contains only positive integer N. Then follow the cases. Each case begins with a line containing exactly two integers P and Q, 1 <= P,Q <= 1000000. P is the number of stops including CCS and Q the number of bus lines. Then there are Q lines, each describing one bus line. Each of the lines contains exactly three numbers - the originating stop, the destination stop and the price. The CCS is designated by number 1. Prices are positive integers the sum of which is smaller than 1000000000. You can also assume it is always possible to get from any stop to any other stop.

Output
For each case, print one line containing the minimum amount of money to be paid each day by ACM for the travel costs of its volunteers.

Sample Input

2
2 2
1 2 13
2 1 33
4 6
1 2 10
2 1 60
1 3 20
3 4 10
2 4 5
4 1 50

Sample Output

46
210

Source
Central Europe 1998

這個題目我想就是專考Dijkstra()的堆寫法吧 中間我采用的逆轉有向邊的寫法 可以把從多點到單源的最短路徑用單源到多點的最短路徑的方法求出。
中間出了一個很隱蔽的錯誤 在一個i, j的雙層循環中 內層循環寫成了i++...結果調了很久。。。
總算過了 發現STL占內存是直接寫鄰接表的2倍左右,這也印證了vector的擴張方式。

??1 Solution:
??2 // by?Optimistic
??3 #include? < stdio.h >
??4 #include? < string .h >
??5 #include? < vector >
??6 using ? namespace ?std;?
??7
??8 const ? int ?MAXINT? = ? 200000000 ;
??9 // const?double?INF?=?10e100;
?10 // const?double?EPS?=?10e-6;?
?11
?12 const ? int ?N? = ? 1000010 ;
?13 int ?nv,?ne;
?14 typedef? struct { int ?jj,?w;} Vtx;
?15 vector < Vtx > ?adj[N];
?16 vector < Vtx > ?adj2[N];
?17 typedef? struct { int ?k,?no;} hNode;
?18 int ?ntc,?hs;
?19 hNode?h[N];?
?20
?21 bool ? operator ? < ?( const ?hNode & ?a,? const ?hNode & ?b)?
?22 {
?23 ? return ?a.k? < ?b.k;
?24 }
?
?25
?26 void ?push(hNode?t)
?27 {
?28 ? int ?i? = ? ++ hs;
?29 ? while (i? > ? 1 ? && ?t? < ?h[i >> 1 ])? {
?30 ??h[i]? = ?h[i >> 1 ];
?31 ??i? >>= ? 1 ;
?32 ?}

?33 ?h[i]? = ?t;
?34 }
?
?35
?36 void ?pop()
?37 {
?38 ?hs -- ;
?39 ? int ?i? = ? 1 ,?ic? = ? 2 ;
?40 ? while (ic? <= ?hs)? {
?41 ?? if (ic + 1 ? <= ?hs? && ?h[ic + 1 ]? < ?h[ic])?ic ++ ;
?42 ?? if (h[hs + 1 ]? < ?h[ic])? break ;
?43 ??h[i]? = ?h[ic];
?44 ??i? = ?ic;
?45 ??ic? <<= ? 1 ;
?46 ?}

?47 ?h[i]? = ?h[hs + 1 ];
?48 }
?
?49
?50 int ?Dijkstra()
?51 {
?52 ?hs? = ? 0 ;
?53 ? int ?i;
?54 ? int ? * ?dist? = ? new ? int [nv];
?55 ? for (i? = ? 0 ;?i? < ?nv;?i ++ )?dist[i]? = ?MAXINT;
?56 ?hNode?now;
?57 ?now.k? = ? 0 ;?now.no? = ? 0 ;
?58 ?push(now);
?59 ? while ( 1 )
?60 ? {
?61 ?? while (hs? > ? 0 ? && ?h[ 1 ].k? > ?dist[h[ 1 ].no])?
?62 ???pop();
?63 ?? if (hs? == ? 0 )? break ;
?64 ??now? = ?h[ 1 ];
?65 ??pop();
?66 ?? int ?u? = ?now.no;
?67 ??dist[u]? = ?now.k;
?68 ?? for (i? = ? 0 ;?i? < ?adj[u].size();?i ++ )
?69 ?? {
?70 ??? int ?v? = ?adj[u][i].jj;
?71 ??? int ?w? = ?adj[u][i].w;
?72 ??? if (dist[v]? > ?dist[u]? + ?w)
?73 ??? {
?74 ????now.k? = ?dist[u]? + ?w;
?75 ????now.no? = ?v;
?76 ????push(now);
?77 ????dist[v]? = ?dist[u]? + ?w;
?78 ???}

?79 ??}

?80 ?}

?81 ? int ?ans? = ? 0 ;
?82 ? for (i? = ? 0 ;?i? < ?nv;?i ++ )
?83 ??ans? += ?dist[i];
?84 ? return ?ans;
?85 }
?
?86
?87 void ?init()
?88 {
?89 ? int ?i,?u,?v,?w;
?90 ?Vtx?x;
?91 ? // initiation
?92 ? for (i? = ? 0 ;?i? < ?nv;?i ++ )? {
?93 ??adj2[i].clear();
?94 ??adj[i].clear();
?95 ?}

?96 ? // input
?97 ?scanf( " %d?%d " ,? & nv,? & ne);
?98 ? for (i? = ? 0 ;?i? < ?ne;?i ++ )? {
?99 ??scanf( " %d?%d?%d " ,? & u,? & v,? & w);
100 ??u -- ;?v -- ;?
101 ??x.jj? = ?v;?x.w? = ?w;
102 ??adj[u].push_back(x);
103 ?}

104 ? // pretreatment
105 }
?
106
107 void ?Reverse()
108 {
109 ? int ?i,?j;
110 ?Vtx?x;
111 ? for (i? = ? 0 ;?i? < ?nv;?i ++ )
112 ??adj2[i].clear();
113 ? for (i? = ? 0 ;?i? < ?nv;?i ++ )
114 ? {
115 ?? for (j? = ? 0 ;?j? < ?adj[i].size();?j ++ )
116 ?? {
117 ???x.jj? = ?i;
118 ???x.w? = ?adj[i][j].w;
119 ???adj2[adj[i][j].jj].push_back(x);
120 ??}

121 ?}

122 ? for (i? = ? 0 ;?i? < ?nv;?i ++ )
123 ? {
124 ??adj[i].clear();
125 ?? for (j? = ? 0 ;?j < adj2[i].size();?j ++ )
126 ???adj[i].push_back(adj2[i][j]);
127 ?}

128 }
?
129
130 void ?work()
131 {
132 ? int ?x? = ?Dijkstra();
133 ?Reverse();
134 ?x? += ?Dijkstra();
135 ?printf( " %d\n " ,?x);
136 }
?
137
138 int ?main()
139 {
140 // ?freopen("t.in",?"r",?stdin);
141 ?scanf( " %d " ,? & ntc);
142 ? while (ntc -- )
143 ? {
144 ??init();
145 ??work();
146 ?}

147 ? return ? 0 ;
148 }
?
149

Feedback

# re: PKU1511 Invitation Cards   回復  更多評論   

2007-04-16 22:38 by bon
while (hs > 0 && h[ 1 ].k > dist[h[ 1 ].no]) pop();
請問這一句是什么意思?多謝!

# re: PKU1511 Invitation Cards   回復  更多評論   

2007-04-17 13:02 by oyjpart
72 if (dist[v] > dist[u] + w)
73 {
74 now.k = dist[u] + w;
75 now.no = v;
76 push(now);
77 dist[v] = dist[u] + w;
78 }
從這段代碼中可以看到 在一次添加節點后 并沒有按照常理對其他連接的可改進節點做修正(實際上是模版沒有擴充修改一個節點的值然后維護堆性質的功能) 我們把那些舊的節點稱為廢節點的話 所以在選出dist最小的節點的時候要看看是不是廢節點 如果是的就要不斷POP出來
while (hs > 0 && h[ 1 ].k > dist[h[ 1 ].no]) pop();
應該很好理解了
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美色另类天堂2015| 99成人免费视频| 欧美中日韩免费视频| 亚洲一区二区三区在线| 国产精品久久久久三级| 午夜精品影院| 欧美在线3区| 亚洲国产精品久久人人爱蜜臀 | 性欧美精品高清| 亚洲一区二区三区中文字幕在线| 国产精品久久久久久五月尺| 亚洲综合三区| 欧美怡红院视频| 亚洲国产精品成人综合| 亚洲精品久久久久中文字幕欢迎你| 欧美国产国产综合| 亚洲一区二区在线免费观看| 亚洲欧美色一区| 91久久精品国产| 亚洲影院免费观看| 亚洲韩国日本中文字幕| 亚洲美女福利视频网站| 一区二区三区产品免费精品久久75| 另类图片综合电影| 亚洲欧洲另类国产综合| 亚洲午夜精品在线| 亚洲国产欧美久久| 久久精品国产69国产精品亚洲| 午夜在线一区| 久久精品99国产精品| 亚洲欧美激情一区二区| 亚洲国产专区| 欧美亚洲自偷自偷| 亚洲一卡久久| 欧美日韩国产一区二区| 羞羞漫画18久久大片| 亚洲一卡二卡三卡四卡五卡| 一区二区三区久久精品| 亚洲欧洲日产国产网站| 国产精品中文字幕欧美| 欧美国产一区在线| 国产精品区免费视频| 欧美国产欧美综合| 国内精品美女av在线播放| 日韩一级免费| 亚洲欧洲精品一区二区三区| 亚洲欧美中日韩| 亚洲图片你懂的| 欧美了一区在线观看| 蜜桃av一区二区| 国产一区二区精品久久| 妖精成人www高清在线观看| 久久亚洲精品视频| 国产欧美日本在线| 欧美老女人xx| 亚洲午夜免费福利视频| 夜夜嗨av一区二区三区网页| 亚洲高清在线观看一区| 性欧美大战久久久久久久免费观看| 一本久久综合| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久久久国内| 久久久不卡网国产精品一区| 国产精品久久久久久影视| 亚洲日本理论电影| 最新高清无码专区| 欧美mv日韩mv国产网站| 国产日本欧洲亚洲| 亚洲免费一在线| 欧美一级免费视频| 国产伦精品一区二区三区照片91 | 亚洲自拍三区| 国产精品乱码人人做人人爱| 夜夜精品视频一区二区| 亚洲欧美日本日韩| 国产精品午夜视频| 欧美一区观看| 欧美韩国一区| 99精品免费网| 国产精品爽黄69| 午夜亚洲视频| 牛牛精品成人免费视频| 亚洲视频自拍偷拍| 国产精品裸体一区二区三区| 亚洲欧美国产77777| 久久久午夜精品| 亚洲制服欧美中文字幕中文字幕| 欧美日韩人人澡狠狠躁视频| 欧美诱惑福利视频| 欧美亚洲在线播放| 欧美一级视频| 欧美精品尤物在线| 亚洲视频在线免费观看| 欧美伊人久久大香线蕉综合69| 国产在线视频欧美| 欧美成黄导航| 亚洲欧美日韩在线播放| 欧美成人免费网| 亚洲欧美国产精品桃花| 在线观看一区二区视频| 欧美日韩一区二区三区在线看 | 国产视频在线观看一区二区三区 | 欧美一区二区在线免费播放| 午夜精品久久久久久久白皮肤| 久久精品视频在线看| 精久久久久久久久久久| 亚洲欧美影院| 91久久午夜| 亚洲尤物在线视频观看| 亚洲综合视频1区| 欧美视频一区二区在线观看 | 亚洲作爱视频| 国产婷婷色一区二区三区| 欧美精品v日韩精品v国产精品 | 久久综合给合久久狠狠色| 亚洲国产一区二区三区在线播| 欧美日韩国产bt| 快播亚洲色图| 欧美激情91| 性欧美xxxx大乳国产app| 亚洲日本乱码在线观看| 欧美成人精品一区| 久久青草久久| 99re热这里只有精品视频| 欧美激情小视频| 久久九九国产精品怡红院| 亚洲国产成人久久综合一区| 欧美一二区视频| 亚洲巨乳在线| 1024国产精品| 精品电影在线观看| 欧美四级伦理在线| 久久久www成人免费无遮挡大片| 99国内精品| 亚洲盗摄视频| 久久久久久九九九九| 亚洲午夜激情| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美一区二区三区免费视| 永久域名在线精品| 国产精品入口尤物| 欧美全黄视频| 欧美日韩hd| 欧美电影在线观看完整版| 久久精品视频在线| 欧美一区二区成人6969| 正在播放欧美一区| 亚洲国产日韩欧美| 欧美好骚综合网| 欧美成黄导航| 欧美伊人久久| 亚洲一区二区三区国产| 一区二区三区免费观看| 一本色道综合亚洲| 一区二区三区不卡视频在线观看 | 亚洲一区精品视频| 99伊人成综合| 久久精品一区二区国产| 亚洲午夜精品久久久久久app| 亚洲人成网站影音先锋播放| 永久免费精品影视网站| 亚洲欧美制服另类日韩| 欧美在线视频播放| 亚洲欧美激情四射在线日| 亚洲一区二区三区高清不卡| 一本一本久久| 中文欧美在线视频| 亚洲视频一二三| 欧美日韩三级电影在线| 亚洲电影下载| 日韩视频免费看| 中文日韩电影网站| 亚洲日本成人| 亚洲女ⅴideoshd黑人| 亚洲性夜色噜噜噜7777| 亚洲手机在线| 午夜欧美理论片| 狂野欧美一区| 美女脱光内衣内裤视频久久影院| 蜜月aⅴ免费一区二区三区| 欧美激情欧美狂野欧美精品| 亚洲激情视频在线播放| 一区二区三区高清在线| 欧美大色视频| 亚洲一区自拍| 久久亚洲综合网| 欧美精品久久天天躁| 国产精品麻豆欧美日韩ww| 国产欧美日韩另类一区 | 美女精品国产| 亚洲免费av电影| 久久婷婷国产麻豆91天堂| 欧美在线视频全部完| 久久综合给合| 国产日产精品一区二区三区四区的观看方式 | 亚洲美女视频| 欧美影院成年免费版| 欧美成人网在线| 国产偷国产偷亚洲高清97cao| 亚洲精品社区|