您的位置:首页 > 其它

[kuangbin带你飞]专题四 最短路练习-G

2016-12-14 19:27 218 查看

题意:

题意:信息传输,总共有n个传输机,先要从1号传输机向其余n-1个传输机传输数据,传输需要时间,给出一个严格的下三角(其实就是对角线之下的不包括对角线的部分)时间矩阵,a[i][j]代表从i向j传输数据需要的时间,并规定数据传输之间并无影响,即第一个传输机可以同时向其余传输机传输数据。求所有传输任务所需的最短时间。

tip:

我知道这道题查体题姐估计都是看不懂题orz

http://poj.org/problem?id=1502

dijstra就没了

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
int n;
typedef pair<int,int>pii;
priority_queue<pii,vector<pii>,greater<pii> >q;
const int maxn = 110;
const int INF = 1<<30;
int head[maxn*2],tot,dis[maxn*2];
char s[10];
int utoi(){
int ans = 0;
for(int i = 0 ; i < strlen(s);i++){
ans = ans*10+s[i]-'0';
}
//printf("ans = %d\n",ans);
return ans;
}

struct node{
int v,w,next;
}edges[maxn*maxn*2];
void add(int u,int v,int w){
edges[tot].v = v;edges[tot].w = w;edges[tot].next=head[u];head[u] = tot++;
edges[tot].v = u;edges[tot].w = w;edges[tot].next=head[v];head[v] = tot++;
}

void dij(){
while(!q.empty()){
int no = q.top().second;q.pop();
for(int k = head[no];k != -1;k=edges[k].next){
if(dis[edges[k].v]>dis[no]+edges[k].w){
dis[edges[k].v] = dis[no]+edges[k].w;
q.push(make_pair(dis[edges[k].v],edges[k].v));
}
}
}
}

void init(){
memset(head,-1,sizeof(head));
tot= 0;
for(int i = 1; i <= n ; i++)    dis[i] = INF;
for(int i = 1; i <= n ; i++){
for(int j =1 ; j < i ; j++){
scanf("%s",s);
if(s[0]!='x'){
add(i,j,utoi());
}
}
}
q.push(make_pair(0,1));
dis[1] = 0;
}
void sov(){
int ans = 0;
for(int i = 2;  i <= n ; i++)
ans = max(ans,dis[i]);
printf("%d\n",ans);
}

int main(){
while(~scanf("%d",&n)){
init();
dij();
sov();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: