首页 > 其他分享 >P1339 [USACO09OCT] Heat Wave G

P1339 [USACO09OCT] Heat Wave G

时间:2024-03-27 22:56:47浏览次数:21  
标签:value head int USACO09OCT Heat P1339 heap best cnt2

题解

Dijkstra算法的应用,我这里采用了 堆结构优化+反向索引堆优化 最大化的优化了时间复杂度。题解区的复杂度是O(mlogm)而我优化后达到了O((n+m)logn)即复杂度和点的个数相关,而非边的条数。

code

 

#include<bits/stdc++.h>
using namespace std;
const int N=6200*2+5;
int n,m,s,t,cnt2=1;
int head[2505],Next[N],to[N],w[N],vis[2505],cnt[2505];
struct Node{
    int way,value;
};
Node heap[2505];
int len=0;
void initial(){
    for (int i=1;i<=n;i++){
        vis[i]=-1;
        cnt[i]=1e9;
    }
}
void heapinsert(int id,int weight){
    Node x;
    x.way=id;
    x.value=weight;
    if (vis[id]==-1) {
        vis[id]=len;
        cnt[id]=weight;
        heap[len++]=x;
    }
    int i=vis[id];
    while (i>0){
        int l=(i-1)/2;
        if (heap[l].value<=heap[i].value) break;
        else {
            vis[heap[l].way]=i;
            vis[id]=l;
            swap(heap[l],heap[i]);
            i=l;
        }
    }
}
void heapfy(int i){
    int l=i*2+1;
    while (l<len){
        int best=l+1<len && heap[l+1].value<heap[l].value ? l+1 : l;
        best=heap[best].value>=heap[i].value ? i : best;
        if (best==i) break;
        vis[heap[best].way]=i;
        vis[heap[i].way]=best;
        swap(heap[i],heap[best]);
        i=best;
        l=i*2+1;
    }
}
void build(){
    int from,To,value;
    cin>>from>>To>>value;
    Next[cnt2]=head[from];
    to[cnt2]=To;
    w[cnt2]=value;
    head[from]=cnt2;
    cnt2++;
    Next[cnt2]=head[To];
    to[cnt2]=from;
    w[cnt2]=value;
    head[To]=cnt2;
    cnt2++;
}
int main(){
    cin>>n>>m>>s>>t;
    initial();
    for (int i=1;i<=m;i++) build();
    heapinsert(s,0);
    cnt[s]=0;
    while (true){
        Node x=heap[0];
        vis[x.way]=-2;
        heap[0]=heap[--len];
        heapfy(0);
//        cout<<x.way<<" "<<x.value<<endl<<endl;
//        for (int j=0;j<len;j++) cout<<heap[j].way<<" "<<heap[j].value<<endl;
//        cout<<endl;
        if (x.way==t){
            cout<<x.value<<endl;
            break;
        }
        else {
            for (int i=head[x.way];i>0;i=Next[i]){
//                cout<<to[i]<<" "<<w[i]<<" "<<vis[to[i]]<<endl;
                if (vis[to[i]]==-1) heapinsert(to[i],x.value+w[i]);
                if (vis[to[i]]==-2) continue;
                else {
                    if (x.value+w[i]<cnt[to[i]]){
                        cnt[to[i]]=x.value+w[i];
                        heap[vis[to[i]]].value=cnt[to[i]];
                        heapinsert(to[i],cnt[to[i]]);
                    }
                }
//                for (int j=0;j<len;j++) cout<<heap[j].way<<" "<<heap[j].value<<endl;
//                cout<<endl;
            }
        }
    }
    return 0;
}

 

标签:value,head,int,USACO09OCT,Heat,P1339,heap,best,cnt2
From: https://www.cnblogs.com/purple123/p/18100505

相关文章

  • CheatEngine百度网盘加速
    1.下载安装CheatEngine通过CE官网或者CEGitHub均可以下载2.CheatEngine汉化2.1.下载中文包进入CE官网,点击右侧导航Downloads,下拉找到Translations,下载中文包2.进入CE安装目录右键点击CE图标,选择属性,找到“起始位置”进入CE安装目录后,进入languages文件夹,将解压后的zh_CN......
  • 搜索引擎用法 cheatsheet
    逻辑写法与keyword1keyword2或keyword1ORkeyword2限定关键词的排列"keyword"限定搜索的网站site:cnblogs.comsite:cnblogs.com/Undefined443site:.com只搜索标题intitle:keywordallintitle:keyword1keyword2只搜索网页正文intext:keywordallint......
  • ABC337 D Cheating Gomoku Narabe 题解
    QuestionABC337DCheatingGomokuNarabe给出一个\(H\timesW\)的矩阵,由o,x,.组成,一次操作为把一个.变成o,问需要最少多少次操作使得横着或竖着有连续的\(K\)个oSolution先来考虑只有一行的情况,我们定义一个长度为\(K\)的"窗口",假设需要把这个"窗口"里面的所有......
  • 利用R语言heatmap.2函数进行聚类并画热图
    数据聚类然后展示聚类热图是生物信息中组学数据分析的常用方法,在R语言中有很多函数可以实现,譬如heatmap,kmeans等,除此外还有一个用得比较多的就是heatmap.2。最近在网上看到一个笔记文章关于《一步一步学heatmap.2函数》,在此与大家分享。由于原作者不详,暂未标记来源,请原作者前来认......
  • P1339 [USACO09OCT] Heat Wave G 最短路入门题 Dijkstra/SPFA/Dijkstra+优先队列优化
    目录朴素的Dijkstra算法SPFA算法Dijkstra+优先队列优化题目链接:https://www.luogu.com.cn/problem/P1339题目大意:无向图有单源最短路。朴素的Dijkstra算法时间复杂度\(O(n^2)\)。#include<bits/stdc++.h>usingnamespacestd;constintmaxn=2505;structEdge......
  • Grafana学习(5)——Introduction to histograms and heatmaps
    Ahistogramisagraphicalrepresentationofthedistributionofnumericaldata.Itgroupsvaluesintobuckets(sometimesalsocalledbins)andthencountshowmanyvaluesfallintoeachbucket.Insteadofgraphingtheactualvalues,histogramsgraphthe......
  • DevExpress WinForms HeatMap组件,一个高度可自定义热图控件!
    通过DevExpressWinForms可以为WindowsForms桌面平台提供的高度可定制的热图UI组件,体验DevExpress的不同之处。DevExpressWinForms有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还......
  • 2.0 熟悉CheatEngine修改器
    CheatEngine一般简称为CE,它是一款功能强大的开源内存修改工具,其主要功能包括、内存扫描、十六进制编辑器、动态调试功能于一体,且该工具自身附带了脚本工具,可以用它很方便的生成自己的脚本窗体,CE工具可以帮助用户修改游戏或者软件中的内存数据,以获得一些其他的功能,CE可以说是目前......
  • 2.0 熟悉CheatEngine修改器
    CheatEngine一般简称为CE,它是一款功能强大的开源内存修改工具,其主要功能包括、内存扫描、十六进制编辑器、动态调试功能于一体,且该工具自身附带了脚本工具,可以用它很方便的生成自己的脚本窗体,CE工具可以帮助用户修改游戏或者软件中的内存数据,以获得一些其他的功能,CE可以说是目前......
  • IDAPro Cheatsheet
    IDAPro是一款由Hex-Rays开发的反汇编软件,可以用于逆向工程、漏洞分析、恶意代码分析、软件调试等领域。它支持多种处理器架构和操作系统,具有强大的反编译功能,可以将二进制文件转换为高级语言代码。除了反编译功能,IDAPro还提供了许多其他功能,如动态调试、代码浏览、数据交叉引用......