CQOI新年好

2024-04-10 04:08
文章标签 cqoi 新年好

本文主要是介绍CQOI新年好,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                                       CQOI新年好                                             

重庆城里有n个车站,m条双向公路连接其中的某些车站。每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。在一条路径上花费的时间等于路径上所有公路需要的时间之和。
  佳佳的家在车站1,他有五个亲戚,分别住在车站a,b,c,d,e。过年了,他需要从自己的家出发,拜访每个亲戚(顺序任意),给他们送去节日的祝福。怎样走,才需要最少的时间?

输入格式:

第一行:n(n<=50,000),m(m<=100,000)为车站数目和公路的数目。
  第二行:a,b,c,d,e,为五个亲戚所在车站编号(1<a,b,c,d,e<=n)。
  以下m行,每行三个整数x,y,t(1<=x,y<=n,1<=t<=100),为公路连接的两个车站编号和时间。

输出格式:

  仅一行,包含一个整数T,为最少的总时间

样例输入:

  6  62  3  4  5  61  2  82  3  33  4  44  5  55  6  21  6  7

样例输出:

21

数据范围:

50%的数据满足,n<=1000,m<=10000;
100%的数据满足,n<=50000,m<=100000;

时间限制:

1000

空间限制:

512000
基础算法:最短路加dfs深搜,我们搜出2,3,4,5,6所有全排列,对于每个亲戚和他自己都跑个单源最短路,最终按那个序列走一趟,比一下大小就可以AC了。

/*
6  6
2  3  4  5  6
1  2  8
2  3  3
3  4  4
4  5  5
5  6  2
1  6  7*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<new>
#include<queue>
#include<iostream>
using  namespace  std;
int  s[7];
int  dis[7][50001];
int  n;
int  m,u,v,w,ans=2e9;
bool  pg[50001];
int  flag[7];
int  ll[7];
int  ne[300001],fir[50001],val[300001],to[300001],tot;
void  add( int  u, int  v, int  w)
{
     to[++tot]=v;val[tot]=w;ne[tot]=fir[u];fir[u]=tot;
}
queue< int > q;
int  doit()
{
     int  lol=0;
     for ( int  i=1;i<=6;i++)
     {
         lol+=dis[ll[i]][s[ll[i+1]]];
     }
     ans=min(lol,ans);
}
void  dfs( int  x)
{
     if (x==6) doit();
     for ( int  i=2;i<=6;i++)
     {
         if (!flag[i])
         {
             flag[i]=1;
             ll[x+1]=i;
             dfs(x+1);
             flag[i]=0;
             ll[x+1]=0;
         }
     }
}
int  main()
{
     cin>>n>>m;
     s[1]=1;
     ll[1]=1;
     for ( int  i=2;i<=6;i++) cin>>s[i];
     for ( int  i=1;i<=m;i++)
     {
         cin>>u>>v>>w;
         add(u,v,w);
         add(v,u,w);
     }
     for ( int  i=1;i<=6;i++)
     {
         while (!q.empty())q.pop();
         for ( int  j=1;j<=n;j++) dis[i][j]=1e8;
         for ( int  j=1;j<=n;j++) pg[j]=0;
         q.push(s[i]);dis[i][s[i]]=0;pg[s[i]]=1;
         while (!q.empty())
         {
             int  xx=q.front();
             q.pop();pg[xx]=0;
             for ( int  k=fir[xx];k;k=ne[k])
             {
                 int  ttt=to[k];
                 if (dis[i][xx]+val[k]<=dis[i][ttt])
                 {
                     dis[i][ttt]=dis[i][xx]+val[k];
                     if (!pg[ttt])
                     {
                         q.push(ttt);
                         pg[ttt]=1;
                     }
                 }
             }
         }
     }
     dfs(1);
     cout<<ans;
}

这篇关于CQOI新年好的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890029

相关文章

Java:2016新年好!

近些日子在闲下来的时候也开始了Java之路,在看J2SE的视频的时候,觉得熟悉,毕竟这一块的知识在原来软考的时候看见过。但是当时很多的东西知识匆匆的走了一遍,并没有留下什么东西。                 下面说说自己在开始Java之路,遇上的一些美好的插曲吧。                  就我目前而言,暂时还不了解Java这门语言的魅力所在,如果谁能

CQOI余数之和

CQOI余数之和 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。   例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7

CQOI珠宝

CQOI珠宝 给一棵n个结点的树,给每个点安排一个正整数编号,使得相邻点具有不同的编号,编号的总和尽量小。 输入格式:   第一行:n(n<=50,000)  以下n-1行,每行两个数u,v(1<=u,v<=n),表示u 和v有一条边 输出格式:   仅一行,为最小编号和 样例输入:

CQOI三角形

CQOI三角形  给出n个三角形,求它们并的面积。 输入格式:   第一行:n(n<=100) ,即三角形的个数。   以下n行,每行六个整数x1,y1,x2,y2,x3,y3,代表三角形的顶点坐标。坐标均为不超过106的实数,输入数据保留1位小数 输出格式: 输出并的面积u,保留两位小数

新年好!腾源虎给您拜年啦~

欢迎关注「腾源会」公众号,期待你的「在看」哦~👇

洛谷P5764 新年好(dijkstra堆优化+DFS)

重庆城里有 nn 个车站,mm 条 双向 公路连接其中的某些车站。   每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。 在一条路径上花费的时间等于路径上所有公路需要的时间之和。 佳佳的家在车站 1,他有五个亲戚,分别住在车站 a,b,c,d,e。 过年了,他需要从自己的家出发,拜访每个亲戚(顺序任意),给他们送

CQOI 2017 题解

[CQOI2017]小Q的棋盘 贪心走完最长链,然后剩下的两步可以走一个点 [CQOI2017]小Q的表格 发现 b ∗ f ( a , a + b ) = ( a + b ) ∗ f ( a , b ) b*f(a,a+b)=(a+b)*f(a,b) b∗f(a,a+b)=(a+b)∗f(a,b), 于是有 f ( a , a + b ) a + b = f ( a , b ) b \fra

CQOI 2018 题解

[CQOI2018]社交网络 矩阵树模板 [CQOI2018]解锁屏幕 状压DP模板 [CQOI2018]交错序列 x a y b = ( n − y ) a y b = ∑ i = 0 a ( n i ) n i ( − 1 ) a − i y a + b − i x^ay^b=(n-y)^ay^b=\sum_{i=0}^a\binom{n}{i}n^i(-1)^{a-i}y^{a+b-i}

【算法】新年好(堆优化dijkstra)

题目          重庆城里有 n 个车站,m 条 双向 公路连接其中的某些车站。         每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。         在一条路径上花费的时间等于路径上所有公路需要的时间之和。         佳佳的家在车站 1,他有五个亲戚,分别住在车站 a,b,c,d,e。

【算法】新年好(堆优化dijkstra)

题目          重庆城里有 n 个车站,m 条 双向 公路连接其中的某些车站。         每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。         在一条路径上花费的时间等于路径上所有公路需要的时间之和。         佳佳的家在车站 1,他有五个亲戚,分别住在车站 a,b,c,d,e。