请柬(invite)
来源:互联网 发布:python 防止sql注入 编辑:程序博客网 时间:2024/06/09 23:41
【问题描述】
在电视时代,没有多少人观看戏剧表演。Malidinesia古董喜剧演员意识到这一事实,他们想宣传剧院,尤其是古色古香的喜剧片。他们已经打印请帖和所有必要的信息和计划。许多学生被雇来分发这些请柬。每个学生志愿者被指定一个确切的公共汽车站,他或她将留在那里一整天,邀请人们参与。
这里的公交系统是非常特殊的:所有的线路都是单向的,连接两个站点。公共汽车离开起始点,到达目的地之后又空车返回起始点。
学生每天早上从总部出发,乘公交车到一个预定的站点邀请乘客。每个站点都被安排了一名学生。在一天结束的时候,所有的学生都回到总部。现在需要知道的是,学生所需的公交费用的总和最小是多少。
【输入文件】
第1行有两个整数n、m(1<=n,m<=1000000),n是站点的个数,m是线路的个数。
然后有m行,每行描述一个线路,包括3个整数,起始点,目的地和价格。
总部在第1个站点,价钱都是整数,且小于1000000000。
【输出文件】
输出一行,表示最小费用。
【样例输入】
4 6
1 2 10
2 1 60
1 3 20
3 4 10
2 4 5
4 1 50
【样例输出】
210
【样例解释】
学生各自从总部被派遣到2,3,4站点,然后又回到总部
1-2-4-1:10+5+50=65
1-3-4-1:20+10+50=80
1-2-4-1:10+5+50=65
65+80+65=210
【注意】
此题数据规模较大,需要使用较为高效的算法,此题不设小规模数据分数。
建立双向图然后两次单源最短路,用dijkstra+heap练练手
program zhen;type sonlink=^node; node=record e:longint; v:int64; next:sonlink; end;var son:array[0..1000000,1..2]of sonlink; dist:array[0..1000000]of int64; heap,hpos:array[0..1000000]of longint; i,j,n,m,len:longint; ans:int64;procedure init_data;var i,x,y,v:longint; p:sonlink;begin readln(n,m); for i:=1 to m do begin readln(x,y,v); new(p); p^.v:=v; p^.e:=y; p^.next:=son[x,1];son[x,1]:=p; new(p); p^.v:=v; p^.e:=x; p^.next:=son[y,2];son[y,2]:=p; end;end;procedure swap(var x,y:longint);var t:longint;begin t:=x;x:=y;y:=t;end;procedure sifup(s:longint);var p:longint;begin while s>1 do begin p:=s shr 1; if dist[heap[p]]>dist[heap[s]] then begin hpos[heap[p]]:=s;hpos[heap[s]]:=p; swap(heap[p],heap[s]); end else break; s:=p; end;end;procedure sifdown(p:longint);var s:longint;begin while p shl 1<=len do begin s:=p shl 1; if (s<len) and (dist[heap[s+1]]<dist[heap[s]]) then inc(s); if dist[heap[p]]>dist[heap[s]] then begin hpos[heap[p]]:=s;hpos[heap[s]]:=p; swap(heap[p],heap[s]); end else break; p:=s; end;end;procedure extract_min;begin heap[1]:=heap[len]; hpos[heap[1]]:=1; dec(len); sifdown(1);end;procedure dijkstra(x:longint);var i,j,k:longint; t:int64; p:sonlink;begin dist[1]:=0; for i:=2 to n do dist[i]:=1000000000000; len:=n; for i:=1 to n do begin hpos[i]:=i; heap[i]:=i; end; for i:=1 to n do begin k:=heap[1]; extract_min; p:=son[k,x]; while p<>nil do begin t:=dist[k]+p^.v; if t<dist[p^.e] then begin dist[p^.e]:=t; sifup(hpos[p^.e]); end; p:=p^.next; end; end; for i:=2 to n do ans:=ans+dist[i];end;begin assign(input,'invite.in');reset(input); assign(output,'invite.out');rewrite(output); init_data; ans:=0; dijkstra(1); dijkstra(2); writeln(ans); close(input);close(output);end.
0 0
- 请柬(invite)
- 【u017】请柬
- SIP-INVITE
- 图片请柬制作总结
- 洛谷 P1342 请柬
- 【洛谷1342】请柬
- sip re-invite 详解
- SIP tech-invite
- 理解SIP re-INVITE
- SIP invite 状态转变
- RFC3261 SIP协议---- invite
- SIP INVITE流程
- 洛谷P1342 请柬(spfa)
- I want a Gmail Invite!
- Invite you for our job
- http://www.tech-invite.com/
- 商务文书范例——邀请函、请柬
- “电子版H5结婚请柬”制作全攻略
- CentOS安装hadoop2.6.0
- 算法之神奇的位运算
- 2-2
- 【8. HA模块】云跳板机服务系统设计及实现
- 使用Spring JDBC框架连接并操作数据库
- 请柬(invite)
- C语言输出菱形for循环
- 设计模式之Proxy模式(笔记)
- win git error init_cheap-VirtualAlloc pointer is null, Win32 error 487
- thinkphp 退出登陆
- 递归
- OC基础语法学习2:面向对象中的特点
- 树莓派 libcurl安装
- 闭包与柯里化