D. Lunar New Year and a Wander bfs+优先队列
2024-09-06 14:02:20
D. Lunar New Year and a Wander bfs+优先队列
题意
给出一个图,从1点开始走,每个点至少要经过一次(可以很多次),每次经过一个没有走过的点就把他加到走过点序列中,问最小字典序的序列是多少
思路
起始就是从每次可达的点的选取最小的那个走,拓展可达的点,然后重复直到走完了全部为止,直接用个bfs+优先队列即可
#include<bits/stdc++.h>
#include<stdlib.h>
using namespace std;
const int maxn = 3e5+5;
typedef long long ll;
#define F first
#define S second
#define pb push_back
#define pii pair<int ,int >
int a[maxn],c[maxn];
vector<int>G[maxn];
int vis[maxn];
bool cmp(int x,int y){
char num1[10],num2[10];
sprintf(num1,"%d",x);
sprintf(num2,"%d",y);
int len1=strlen(num1),len2=strlen(num2);
for(int i=0;i<min(len1,len2);i++){
if(num1[i]>num2[i]){
return 0;
}
else if(num1[i]<num2[i])return 1;
}
return len1<=len2;
}
priority_queue<int,vector<int>,greater<int> >q;
void bfs(){
q.push(1);
vis[1]=1;
while(!q.empty()){
int tmp=q.top();
q.pop();
cout<<tmp<<" ";
for(int i=0;i<G[tmp].size();i++)
{
int y=G[tmp][i];
if(!vis[y]){q.push(y);vis[y]=1;}
}
}
}
int main(){
int n,m,t,d;
scanf("%d%d",&n,&m);
int x,y;
for(int i=0;i<m;i++){
scanf("%d%d",&x,&y);
G[x].pb(y);
G[y].pb(x);
}
bfs();
return 0;
}
最新文章
- CSS3与页面布局学习总结(六)——CSS3新特性(阴影、动画、渐变、变形、伪元素等)
- 鼠标滑过图片变暗文字链接滑出jQuery特效
- Lua 协程coroutine
- asp.net 禁用按钮防止重复提交
- Android--使用Canvas绘图
- 洛谷P1465
- Delphi对于控件的SuperClassing(封装并扩展Button,使之变成TButton)
- Linux TCP/IP parameters reference
- POJ1961 KMP算法
- linux 日志查看总结
- hdu_5963_朋友(找规律)
- Docker入门书籍
- Spring Boot 参数校验
- 飞鱼相册笔记(1)----外置SD卡文件夹名称不区分大小写
- Spring MVC 使用介绍(十五)数据验证 (二)依赖注入与方法级别验证
- eclipse下classes文件夹无法发布到tomcat的问题--tomcat发布慢的问题
- IDEA常用快捷键,收藏以备后用
- Eclipse下高亮显示Freemarker文件
- JS的原生函数
- Windows Store Apps 开发转载