ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

cogs 176. [USACO Feb07] 奶牛聚会 dijkstra

2019-08-11 21:57:52  阅读:313  来源: 互联网

标签:dis2 cogs USACO int dijkstra maxn 聚会 奶牛 dis


176. [USACO Feb07] 奶牛聚会

★☆   输入文件:sparty.in   输出文件:sparty.out   简单对比
时间限制:3 s   内存限制:16 MB

译: zqzas


N(1 ≤ N ≤ 1000)个农场中的每个农场都有一只奶牛去参加位于第X个农场的聚会.共有M (1 ≤ M ≤ 100,000)条单向的道路,每条道路连接一对农场.通过道路i会花费Ti (1 ≤ Ti ≤ 100)的时间.

作为参加聚会的奶牛必须走到聚会的所在地(农场X).当聚会结束时,还要返回各自的农场.奶牛都是很懒的,她们想找出花费时间最少的路线.由于道路都是单向的,所有她们前往农场X的路线可能会不同于返程的路线.

Of all the cows, what is the longest amount of time a cow must spend walking to the party and back? 对于所有参加聚会的奶牛,找出前往聚会和返程花费总时间最多的奶牛,输出这只奶牛花费的总时间.


输入格式:

  • 第1行:三个用空格隔开的整数.

第2行到第M+1行,每行三个用空格隔开的整数:Ai, Bi,以及Ti.表示一条道路的起点,终点和需要花费的时间.


输出格式:

  • 唯一一行:一个整数: 所有参加聚会的奶牛中,需要花费总时间的最大值.

样例输出:

4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3

样例输入:

10

样例说明:

共有4只奶牛参加聚会,有8条路,聚会位于第2个农场.

第4只奶牛可以直接到聚会所在地(花费3时间),然后返程路线经过第1和第3个农场(花费7时间),总共10时间.

 

 

我猜这一道题(可能)很简单<<不要相信我的胡言

自认为这一道题就是正反跑两遍dijkstra就行啦~

然后找两个dis和最大的QAQ 天哪

这一道题的数据范围看起来好可怕的样子

dijkstra是m logm    m是10万(像是能卡过的样子<<肯定能啊)  来吧~

正反建边 一遍水过!

#include<bits/stdc++.h>
#define maxn 1005
#define pa pair<int,int>
using namespace std;
int n,m,p;
vector<int> v[maxn],w[maxn];
vector<int> v2[maxn],w2[maxn];
int dis2[maxn],vis2[maxn];
int dis[maxn],vis[maxn];
priority_queue<pa,vector<pa>,greater<pa> > q;
void Dijkstra()//back 
{
    memset(dis,0x3f,sizeof(dis));
    memset(vis,0,sizeof(vis));
    dis[p]=0;
    q.push(make_pair(0,p));
    while(!q.empty())
    {
        int x=q.top().second;
        q.pop();
        if(vis[x])
            continue;
        vis[x]=1;
        for(int i=0;i<v[x].size();i++)
        {
            int y=v[x][i];
            int val=w[x][i];
            if(dis[y]>dis[x]+val)
            {
                dis[y]=dis[x]+val;
                q.push(make_pair(dis[y],y));
                
            }
        }
    }
}
void Dijkstra2()//to_p 
{
    memset(dis2,0x3f,sizeof(dis2));
    memset(vis2,0,sizeof(vis2));
    dis2[p]=0;
    q.push(make_pair(0,p));
    while(!q.empty())
    {
        int x=q.top().second;
        q.pop();
        if(vis2[x])
            continue;
        vis2[x]=1;
        for(int i=0;i<v2[x].size();i++)
        {
            int y=v2[x][i];
            int val=w2[x][i];
            if(dis2[y]>dis2[x]+val)
            {
                dis2[y]=dis2[x]+val;
                q.push(make_pair(dis2[y],y));
                
            }
        }
    }
}
int main()
{
    freopen("sparty.in","r",stdin);
    freopen("sparty.out","w",stdout);
    scanf("%d%d%d",&n,&m,&p);
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        v[x].push_back(y);
        w[x].push_back(z);
        
        v2[y].push_back(x);
        w2[y].push_back(z);
    }
    Dijkstra();
    Dijkstra2();
    int Max=-1;
    for(int i=1;i<=n;i++)
        Max=max(Max,dis[i]+dis2[i]);
    printf("%d",Max);
    return 0;
}

♪(^∇^*)

 

标签:dis2,cogs,USACO,int,dijkstra,maxn,聚会,奶牛,dis
来源: https://www.cnblogs.com/Tidoblogs/p/11336862.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有