SDUT 2929 人活着系列之芳姐和芳姐的猪
来源:互联网 发布:知美画室怎么样 编辑:程序博客网 时间:2024/04/29 00:49
人活着系列之芳姐和芳姐的猪
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
百年来,人活着是为了什么这个问题一直萦绕在人的脑海里,也一直困扰着人的思想。人活着就是活着了,为活着本身而活着,而不是为活着之外的任何事物而活着的。正因为活着,所以活着。对,是有点莫明其妙,但也是一句最受用的话。
芳姐特别喜欢猪,所以,她特意养了n头猪,建了m个猪圈,顺便在m个猪圈间修了k条无向边,每条边有都有起点u,终点v,距离w。每头猪呆在一个特定的猪圈,有一个问题一直困扰着芳姐,那就是喂猪.....芳姐和猪们约定好,每天去一个固定猪圈去吃饭,芳姐为了不累着她可爱的猪们,想知道所有的猪吃饭走的最短路程是多少?
输入
第一行: 三个数,猪的个数n(1<=n<=350),猪圈个数m(2<=m<=600),猪圈间道路数k(1<=k<=1200).(猪的编号为1..N,猪圈的编号为1..m)
第二行到第N+1行: 1到N头猪所在的猪圈号.
第n+2行到第n+k+1行:每行有三个数:相连的猪圈u、v,两猪圈间距离(1<=w<=255)
注:有的猪圈可能是空的,也可能有多头猪,保证m个猪圈连通。
输出
示例输入
3 4 52341 2 11 3 52 3 72 4 33 4 5
示例输出
8
Dijkstra + 优先队列
#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;struct node{ int v,w,next;} ls[360001];int Pigsty[601];int head[601];int zd[610][610];bool vis[610];int num;void Add(int x,int y,int z){ ls[num].v = y; ls[num].w = z; ls[num].next = head[x]; head[x] = num++;}void Dijkstra(int s,int m){ int t; queue<int >q; memset(vis,false,sizeof(vis)); for(int i=0; i<=m; i++) { zd[s][i] = INF; } zd[s][s] = 0; vis[s] = true; q.push(s); while(!q.empty()) { t = q.front(); q.pop(); int x = t; for(int i=head[x]; ~i; i = ls[i].next) { int y = ls[i].v; if(zd[s][y] > zd[s][x] + ls[i].w) { zd[s][y] = zd[s][x] + ls[i].w; if(!vis[y]) { vis[y] = true; q.push(y); } } } vis[x] = false; }}int main(){ //freopen("in.txt","r",stdin); int n,m,k; while(cin>>n>>m>>k) { int nn = INF; num = 0; memset(Pigsty,0,sizeof(Pigsty)); memset(head,-1,sizeof(head)); int Pig; for(int i=0; i<n; i++) { cin>>Pig; Pigsty[Pig]++; } for(int i=0; i<k; i++) { int x,y,z; cin>>x>>y>>z; Add(x,y,z); Add(y,x,z); } for(int i=1; i<=m; i++) { Dijkstra(i,m); } int sum; for(int i=1; i<=m; i++) { sum = 0; for(int j=1; j<=m; j++) { if(Pigsty[j]) { sum += Pigsty[j] * zd[i][j]; } } if(sum < nn) nn = sum; } printf("%d\n",nn); } return 0;}
Floyd算法
#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;int dis[610][610];void Floyd(int m){ for(int k=1;k<=m;k++) { for(int i=1;i<=m;i++) { for(int j=1;j<=m;j++) { dis[i][j] = dis[i][j] < dis[i][k]+dis[k][j] ? dis[i][j] : dis[i][k] + dis[k][j]; } } }}int main(){ //freopen("in.txt","r",stdin); int s[610]; int n,m,k; cin>>n>>m>>k; for(int i=0;i<n;i++) cin>>s[i]; for(int i=1;i<=m;i++) { for(int j=1;j<=m;j++) { if(i!=j) dis[i][j] = INF; else dis[i][j] = 0; } } for(int i=0;i<k;i++) { int u,v,w; cin>>u>>v>>w; if(dis[u][v] > w) { dis[u][v] = w; dis[v][u] = w; } } int MIN = INF; Floyd(m); for(int i=1;i<=m;i++) { int sum = 0; for(int j=0;j<n;j++) { sum += dis[i][s[j]]; } if(sum < MIN) MIN = sum; } cout<<MIN<<endl; return 0;}
0 0
- SDUT 2929 人活着系列之芳姐和芳姐的猪
- SDUT 2929 人活着系列之芳姐和芳姐的猪
- SDUT 2929 人活着系列之芳姐和芳姐的猪
- SDUT 2929-人活着系列之芳姐和芳姐的猪(最短路Floyd)
- 人活着系列之芳姐和她的猪
- SDUTOJ 2929 人活着系列之芳姐和芳姐的猪(最短路)
- SDUToj 2929 人活着系列之芳姐和芳姐的猪(Floyd+枚举)
- SDUTOJ -2929 人活着系列之芳姐和芳姐的猪(Floyd)
- 人活着系列之芳姐和芳姐的猪 (floyd)
- 人活着系列之芳姐和芳姐的猪
- 人活着系列之芳姐和芳姐的猪
- 人活着系列之芳姐和芳姐的猪(sdut_2929)
- 人活着系列之芳姐和芳姐的猪
- 人活着系列之芳姐和芳姐的猪
- 人活着系列之芳姐和芳姐的猪
- 人活着系列之芳姐和芳姐的猪 Floyd
- sdutacm-人活着系列之芳姐和芳姐的猪
- 人活着系列之芳姐和芳姐的猪(Floyd)
- 几个常用的动画
- java Thread线程run()和start()方法的区别
- 6.Android工程更改api版本?
- TCP/IP协议族-----15、传输控制协议(TCP)
- Pycharm 主题背景色的配置 配色方案 配图
- SDUT 2929 人活着系列之芳姐和芳姐的猪
- 关于undo log格式中事务ID和undo_no
- SlidingMenu属性详解【Android】
- C++编程思想学习笔记---第十章 名字控制
- CSS 预处理器
- 添加ASM磁盘报错ORA-02097和ORA-15014
- [POI 2012]Kinoman(线段树)
- 投简历——继承
- 服务器TIME_WAIT和CLOSE_WAIT区别及解决方案