首页 > 其他分享 >P2573 [SCOI2012] 滑雪

P2573 [SCOI2012] 滑雪

时间:2024-05-03 18:44:58浏览次数:20  
标签:cnt int head value id que 滑雪 P2573 SCOI2012

原题链接

题解

这题乍一看好像是一道最小生成树的模板题,但如果直接找模板打会发现WA。

仔细一看这题是有向图的最小生成树,可以直接套朱刘算法,but,我还不会······

直接套模板的反例

3
3 2 1
1 2 5
1 3 2
2 3 1

所以我们再分析题目,发现只要把山的高度设为第一优先级,边的权值为第二优先级,再建树即可。

code

 

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int M=2e6+5;
typedef long long ll;
int head[N],Next[M],to[M],h[N],weight[M];
bool vis[N];
int n,m,cnt=1,sum=0;
ll pre=0;
struct node{
    int id,value;
    bool operator <(const node &a)const{
        if (h[id]!=h[a.id]) return h[id]<h[a.id];
        return value>a.value;
    }
};
void build(int from,int to_,int w){
    Next[cnt]=head[from];
    to[cnt]=to_;
    weight[cnt]=w;
    head[from]=cnt++;
}
void prim(int from){
    priority_queue<node> que;
    node x;
    x.id=from;
    x.value=0;
    que.push(x);
    while (!que.empty()){
        x=que.top();
        que.pop();
        if (vis[x.id]) continue;
        else vis[x.id]=true;
        sum++;
        pre+=x.value;
        for (int i=head[x.id];i>0;i=Next[i]){
            node y;
            y.id=to[i];
            y.value=weight[i];
            que.push(y);
        }
    }
}
int main(){
    cin>>n>>m;
    for (int i=1;i<=n;i++){
        cin>>h[i];
    }
    for (int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        if (h[a]>=h[b]) build(a,b,c);
        if (h[a]<=h[b]) build(b,a,c);
    }
    prim(1);
    cout<<sum<<" "<<pre;
    return 0;
}

 

标签:cnt,int,head,value,id,que,滑雪,P2573,SCOI2012
From: https://www.cnblogs.com/purple123/p/18171488

相关文章

  • 洛谷题单指南-动态规划1-P1434 [SHOI2002] 滑雪
    原题链接:https://www.luogu.com.cn/problem/P1434题意解读:计算能滑行的最长距离。解题思路:设dp(i,j)表示从i,j可以滑行的最大距离对于4个方向i,j可以到达的点,ni,nj,如果可以滑过去(ni,ni所在点高度更低)则dp(i,j)=max(dp(i,j),1+dp(ni,nj))为了便于搜索4个方向的各条路径,......
  • Poi2002滑雪者命名
    网络流#有源汇上下界费用流#最小点覆盖#Year2002#POI最小点覆盖问题这里可以直接有源汇上下界费用流//Author:xiaruize#ifndefONLINE_JUDGE#definedebug(x)cerr<<"OnLine:"<<__LINE__<<#x<<"="<<x<<endlboolstart_of_memory_u......
  • Poi2002滑雪者命名
    网络流#有源汇上下界费用流#最小点覆盖最小点覆盖问题这里可以直接有源汇上下界费用流//Author:xiaruize#ifndefONLINE_JUDGE#definedebug(x)cerr<<"OnLine:"<<__LINE__<<#x<<"="<<x<<endlboolstart_of_memory_use;#else#defi......
  • P1434 [SHOI2002] 滑雪
    链接:https://www.luogu.com.cn/problem/P1434题目:思路:找每个点的小于链的长度,存在lenless里;找每个点的大于链,存在于lengreat中。然后两个相加,排序,选择最大的那个数字。注意这里长度要加1,因为没有加上自己的(初始数据设置成0)!(按理说其实每个都少了1,所以应当全加1再排序,但是改变......
  • Poi2002滑雪者命名
    网络流#有源汇上下界费用流#最小点覆盖最小点覆盖问题这里可以直接有源汇上下界费用流//Author:xiaruize#ifndefONLINE_JUDGE#definedebug(x)cerr<<"OnLine:"<<__LINE__<<#x<<"="<<x<<endlboolstart_of_memory_use;#else#defi......
  • 基于Java的桃花峪滑雪场租赁系统(Vue.js+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1游客服务2.2雪场管理三、数据库设计3.1教练表3.2教练聘请表3.3押金规则表3.4器材表3.5滑雪场表3.7售票表3.8器材损坏表四、系统展示五、核心代码5.1查询教练5.2教练聘请5.3查询滑雪场5.4滑雪场预......
  • [SCOI2012] 喵星球上的点名
    点击查看代码#include<bits/stdc++.h>usingnamespacestd;intha[50005],res[100005],ans[100005];ints[500005],id[500005],tot,f[100005],l[100005],u[500005],o[100005];intrk[20][500005],r[500005],sa[500005],h[500005],w,p[25];intL[100005],R[100005];int......
  • 滑雪
    这道题目本来很简单主要是来看一下普通DP怎么做这个相当于形成了一个DAG这种矩阵成DAG的模型可以注意一下......
  • [SCOI2012] 滑雪
    Description给定一个带边权有向图。现在从点\(1\)开始走,走的过程中可以无代价回溯任意多步,求在经过最多点的情况下(重复的点算一次),最小边权和是多少。Solution先从点\(1\)BFS,能走到的点就是第一小问答案。根据回溯条件,在最优答案中,每条边至多走一次(考虑走两次的话,一定有一次......
  • 基于Python+Pygame实现一个滑雪小游戏
    目录项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取一、项目介绍使用介绍:运行main.py文件后,通过左右按键可以控制小人的移动,如果经过旗杆那么+10分,如果碰到树木那么减50分。二、Pygame介绍Pygame是一个用于游戏开发和多媒体应用的Python库。它是基于SDL(Simple......