【刷题】【bfs】最优贸易

神奇的bfs证联通,然后贪心求 每一种可能路径上的差值,最后求结果

#include<cstdio>
#include<cstdlib>
#include<queue>
#include<algorithm>
using namespace std;
int n,m;
const int N=100003,M=500003;
int val[N];

int tot[2],head[2][N];
int ev[2][M<<1],enx[2][M<<1];
void add(int u,int v,int k)
{ ev[k][++tot[k]]=v,enx[k][tot[k]]=head[k][u],head[k][u]=tot[k]; }

bool link[2][N];
void bfs(int k,int st)
{
    queue <int> q;
    q.push(st),link[k][st]=true;

    while(!q.empty() )
    {
        int nw=q.front() ;q.pop() ;
        for(int i=head[k][nw];i;i=enx[k][i])
        {
            int nx=ev[k][i];
            if(!link[k][nx] )
                link[k][nx]=true,q.push(nx);
        }
    }
}

int d[N],mx[2][N];
bool cmp(int a,int b)
{ return val[a]<val[b]; }
void get_ans(int k,int st,int v)
{
    mx[k][st]=v;
    queue <int> q;
    q.push(st);

    while(!q.empty() )
    {
        int nw=q.front() ;q.pop() ;
        for(int i=head[k][nw];i;i=enx[k][i])
        {
            int nx=ev[k][i];
            if(!mx[k][nx] && link[k^1][nx] )
                mx[k][nx]=v,q.push(nx);
        }
    }
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++ ) scanf("%d",&val[i]),d[i]=i;
    while(m--)
    {
        int qa,u,v;
        scanf("%d%d%d",&u,&v,&qa );
        add(u,v,0),add(v,u,1);
        if(qa==2 ) add(v,u,0),add(u,v,1);
    }

    bfs(0,1),bfs(1,n);
    sort(d+1,d+n+1,cmp);
    for(int i=1;i<=n;i++)
        if(link[0][d[i]] && link[1][d[i]] && !mx[0][d[i]] )
            get_ans(0,d[i],val[d[i]]);
    for(int i=n;i>0;i--)
        if(link[0][d[i]] && link[1][d[i]] && !mx[1][d[i]] )
            get_ans(1,d[i],val[d[i]]);

    int ans=0;
    for(int i=1;i<=n;i++)
        if(link[0][i] && link[1][i] )
            ans=max(ans,mx[1][i]-mx[0][i] );
    printf("%d\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/xwww666666/p/11811049.html

时间: 2024-08-06 05:39:56

【刷题】【bfs】最优贸易的相关文章

BFS: 刷题专用

# BFS 刷题 看了一天的图方面的东西,这个东西,真的是,思路都懂,但是实现起来,哈哈哈哈哈哈哈,一直处于懵逼的状态,所以就找点题刷吧,加强理解与应用,突然有点理解高中的应试教育了. POJ 3984 题目描述 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 题目链接:http://poj.org/problem?id=3984 这个题,其实就是一个基本的BFS搜索,找最短路线,对于BFS.从出发点开始,第一次遍历

大神刷题表

9月27日 后缀数组:[wikioi3160]最长公共子串 dp:NOIP2001统计单词个数 后缀自动机:[spoj1812]Longest Common Substring II [wikioi3160]最长公共子串 [spoj7258]Lexicographical Substring Search 扫描线+set:[poj2932]Coneology 扫描线+set+树上删边游戏:[FJOI2013]圆形游戏 结论:[bzoj3706][FJ2014集训]反色刷 最小环:[poj1734

luogu P1073 最优贸易

luogu P1073 最优贸易 2017-09-14 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道路在统计条数时也计为 1 条. C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价格不一定相同.但是,同一种商品在同一个城市的买入价和卖出价始终是相同的. 商人阿龙来到 C 国旅游.当他得知同一种商品在不同

P1073 最优贸易

P1073 最优贸易 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路,双向通行的道路在统计条数时也计为 1 条. C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价 格不一定相同.但是,同一种商品在同一个城市的买入价和卖出价始终是相同的. 商人阿龙来到 C 国旅游.当他得知同一种商品在不同城市的价格可能会不同这一信息

刷题感悟 - Guess Number Game II

最近稍微有点懈怠了 刷题不勤了 勉励下自己 这道题目挺有意思的 We are playing the Guess Game. The game is as follows:I pick a number from 1 to n. You have to guess which number I picked.Every time you guess wrong, I'll tell you whether the number I picked is higher or lower.Howeve

7、8月刷题总结

准备开学了囧,7.8月刷题记录,以后好来复习,并且还要好好总结! 数据结构: splay: [BZOJ]1503: [NOI2004]郁闷的出纳员(Splay) [BZOJ]1269: [AHOI2006]文本编辑器editor(Splay) [BZOJ]1507: [NOI2003]Editor(Splay) treap: [BZOJ]1862: [Zjoi2006]GameZ游戏排名系统 & 1056: [HAOI2008]排名系统(treap+非常小心) [BZOJ]3224: Tyvj

[转]POJ的刷题指南(加了超链接的)

网上看到的转过来一下,顺便把题目都加了个超链接,方便刷起~ POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法:       (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.       (4)递推.       (5)构造法.(po

洛谷P1073 最优贸易==codevs1173 最优贸易

P1073 最优贸易 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路,双向通行的道路在统计条数时也计为 1 条. C 国幅员辽阔,各地的资源分布情况各不相同,这就导致了同一种商品在不同城市的价 格不一定相同.但是,同一种商品在同一个城市的买入价和卖出价始终是相同的. 商人阿龙来到 C 国旅游.当他得知同一种商品在不同城市的价格可能会不同这一信息

leetcode 刷题之路 94 N-Queens

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other. Given an integer n, return all distinct solutions to the n-queens puzzle. Each solution contains a distinct board configuration of

按算法刷题路线

搜索:八数码,生日蛋糕,靶形数独,(虫食算),最优贸易,引水入城,埃及分数,(p1189) dp:方格取数,树网的核,旅行路线 贪心:huffman,疫情控制 生成树:灾后重建,货车运输 连通块:间谍网络,星球大战 最短路:最优贸易,社交网络 最大流:地震逃生 区间:RMQ,区间连续和 数论:hank儿子题,解方程,虫食算,向量內积,斐波那契数列 字符串:阿里打印机