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  6
  2  3  4  5  6
  1  2  8
  2  3  3
  3  4  4
  4  5  5
  5  6  2
  1  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;
}

51单片机是一种广泛使用的嵌入式系统微控制器,常用于教学和简单的控制应用。针对新年祝福的需求,可以编写一个基于51单片机的程序,通过LED点阵屏或LCD显示屏展示文字祝福信息,例如“新年快乐”等。 以下是一个使用C语言编写的示例代码,适用于STC89C52RC型号的51单片机,该代码通过延时函数实现字符在LCD1602上的滚动显示效果: ### ### LCD1602 显示新年祝福语示例 ```c #include <reg52.h> sbit RS = P2^0; // 寄存器选择位 sbit RW = P2^1; // 读写选择位 sbit E = P2^2; // 使能信号 void delay(unsigned int time) { unsigned int i, j; for(i = 0; i < time; i++) for(j = 0; j < 120; j++); } void write_command(unsigned char cmd) { RS = 0; // 写命令 RW = 0; // 写操作 P0 = cmd; // 发送命令 E = 1; // 拉高使能端 delay(5); // 短暂延时 E = 0; // 下降沿触发,执行命令 } void write_data(unsigned char dat) { RS = 1; // 写数据 RW = 0; // 写操作 P0 = dat; // 发送数据 E = 1; // 拉高使能端 delay(5); // 短暂延时 E = 0; // 下降沿触发,发送数据 } void init_lcd() { write_command(0x38); // 设置为8位数据接口,两行显示 delay(5); write_command(0x0c); // 开启显示,关闭光标 delay(5); write_command(0x06); // 文字不动,光标自动右移 delay(5); write_command(0x01); // 清屏 delay(5); } void display_string(char *str) { while(*str) { write_data(*str++); } } void main() { init_lcd(); // 初始化LCD display_string("Happy New Year!"); // 显示祝福语 while(1); // 死循环保持程序运行 } ``` 此代码段中包含了一些基本的操作函数,如`delay()`用于产生延时,`write_command()`和`write_data()`分别用来向LCD写入命令和数据。主函数`main()`首先调用`init_lcd()`初始化LCD,然后调用`display_string()`显示字符串"Happy New Year!"[^1]。 为了适应中文显示,需要确保LCD支持中文字符库或者自行定义所需的字符。如果使用的是中文字符专用的LCD模块,则可以通过特定编码直接显示汉字。对于不支持中文的LCD,可能需要通过自定义字符功能来实现部分汉字的显示。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值