`
Simone_chou
  • 浏览: 192595 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

城市平乱(最短路)

    博客分类:
  • NYOJ
 
阅读更多

城市平乱

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
 
描述

南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。

他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。

现在,小工军师告诉南将军,第K号城市发生了暴.乱,南将军从各个部队都派遣了一个分队沿最近路去往暴.乱城市平乱。

现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间。

注意,两个城市之间可能不只一条路。

 
输入
第一行输入一个整数T,表示测试数据的组数。(T<20)
每组测试数据的第一行是四个整数N,M,P,Q(1<=N<=100,N<=M<=1000,M-1<=P<=100000)其中N表示部队数,M表示城市数,P表示城市之间的路的条数,Q表示发生暴.乱的城市编号。
随后的一行是N个整数,表示部队所在城市的编号。
再之后的P行,每行有三个正整数,a,b,t(1<=a,b<=M,1<=t<=100),表示a,b之间的路如果行军需要用时为t

数据保证暴.乱的城市是可达的。
输出
对于每组测试数据,输出第一支部队到达叛乱城市时的时间。每组输出占一行
样例输入
1
3 8 9 8
1 2 3
1 2 1
2 3 2
1 4 2
2 5 3
3 6 2
4 7 1
5 7 3
5 8 2
6 8 2 
样例输出
4

 

     思路:

     Dijkstra + 最短路即可。

 

     AC:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <utility>
#include <queue>

using namespace std;

typedef pair<int, int> pii;

const int VMAX = 1005;
const int EMAX = 100005 * 2;
const int INF = 999999999;

int v[EMAX], fir[VMAX], next[EMAX], w[EMAX];
int ind, m;

int army[VMAX];

int d[VMAX], vis[VMAX];

void add_edge (int f, int t, int val) {
    v[ind] = t;
    w[ind] = val;
    next[ind] = fir[f];
    fir[f] = ind;
    ++ind;
}

void Dij (int x) {
    for (int i = 1; i <= m; ++i) {
        d[i] = i == x ? 0 : INF;
        vis[i] = 0;
    }

    priority_queue<pii, vector<pii>, greater<pii> > q;
    q.push(make_pair(d[x], x));

    while (!q.empty()) {
        pii k = q.top(); q.pop();
        int y = k.second;

        if (vis[y]) continue;
        vis[y] = 1;

        for (int e = fir[y]; e != -1; e = next[e]) {
            int yy = v[e];
            if (d[yy] > d[y] + w[e]) {
                d[yy] = d[y] + w[e];
                q.push(make_pair(d[yy], yy));
            }
        }
    }
}

int main() {

    int t;
    scanf("%d", &t);
    while (t--) {
        ind = 0;
        memset(fir, -1, sizeof(fir));

        int n, p, q;
        scanf("%d%d%d%d", &n, &m, &p, &q);

        for (int i = 0; i < n; ++i) {
            scanf("%d", &army[i]);
        }

        while (p--) {
            int a, b, val;
            scanf("%d%d%d", &a, &b, &val);
            add_edge(a, b, val);
            add_edge(b, a, val);
        }

        int Min = INF;
        for (int i = 0; i < n; ++i) {
            Dij(army[i]);
            Min = min(Min, d[q]);
        }

        printf("%d\n", Min);
    }

    return 0;
}

 

 

分享到:
评论

相关推荐

    关闭屏幕黑屏

    笔记本屏幕关闭,就是关闭屏幕你需要我平乱什么

    元宵节的传说——汉文帝时为纪念平吕而设.doc

    因此,汉文帝刘恒被拥立为新君,他深刻认识到和平盛世的珍贵,为了纪念这次平乱,以及让民众共享和平带来的喜悦,他将平定“诸吕之乱”的正月十五定为全民欢庆的日子,即“与民同乐日”。这一天,京城内外家家户户...

    《李将军列传》写作素材整理.pdf

    在七国之乱中,李广随周亚夫平乱有功,但由于私受梁王赏赐而未能得到应有的封赏。在汉武帝时期,李广虽屡次出战匈奴,但命运多舛,如马邑之战、漠北之战等,均未得到显著的战果。特别是漠北之战,李广因迷路延误战机...

    江苏省2020版高考语文大三轮复习特色专项训练八语言文字运用+文言文+名句含解析20191120193

    【文言文阅读】部分选取了清代朱尔汉的事迹,讲述他在平乱过程中的智勇表现,体现了其领导才能和用兵策略,这部分内容旨在锻炼学生的文言文阅读和理解能力。 综上所述,这份训练资料涵盖了语文复习的多个核心领域,...

    建武十八年改革后刺史职权变化研究.docx

    如遇突发事件,如叛乱,朝廷会临时委派将军或刺史带兵平乱,但在事毕后需交回兵权,以确保中央对军事力量的绝对掌控。 刘秀通过大规模裁军和调整边防策略,进一步削弱了地方军事实力,以防止将领势力过大,确保国家...

    情节构架与人物塑造——读金庸《天龙八部》随想.doc

    他的每一次抉择,如帮助耶律洪基平乱和在聚贤庄之战中对抗宋人,都体现了他内心的挣扎与忠诚的矛盾。萧峰最终的悲剧性死亡,既是解决宋辽矛盾的必然,也是保持其英雄形象的必要,避免了情感上的困境。 与萧峰形成...

    伏波将军与汉铜鼓.docx

    汉光武帝派遣伏波将军马援率军八千,联合当地兵力两万前往平乱。然而,面对徵侧的反抗,马援军队屡战不胜,陷入困境。在此紧要关头,马援梦见了赤帝,也就是南海神的前身,告诉他高州有一面受到日月精华滋养、已经成...

    2014高考语文总复习 诗歌鉴赏、文言文、文学类文本阅读训练4

    在福建平乱过程中,金濂参与军事决策,成功平定了叛乱。面对英宗被俘的危机,他被召回处理军务,并提出了节省开支的十六项建议,确保国家财政不受影响。在皇位更迭和对外关系的处理上,金濂对也先提出的恢复使者往来...

    2017_2018学年高中语文大题精做02湘夫人含解析新人教版选修中国古代诗歌散文欣赏

    3. **诗词创作背景与情感**:岑参的《早上五盘岭》是在特定历史背景下创作的,反映了诗人随剑南西川节度使平乱的情境,诗中尽管蜀道艰险,但诗人的乐观和对使命的热忱使得他“不觉蜀道难”。 4. **诗歌结构与意象**...

    统编版三年级上册语文写字表组词.doc

    12. “乱”及相关词:平乱、乱套、脏乱、心烦意乱、乱七八糟。 13. “棕”及相关词:棕树、棕色、棕熊。 14. “盒”及相关词:盒子、纸盒、药盒。 15. “颜”及相关词:颜色、容颜、颜料、和颜悦色、五颜六色。 16. ...

Global site tag (gtag.js) - Google Analytics