当前位置:网站首页>PAT 1163 Dijkstra Sequence(30)
PAT 1163 Dijkstra Sequence(30)
2022-08-01 12:51:00 【此杭非彼航】
题目



代码
参考代码
// 相等的时候有多种取法, 逐一判断
#include<bits/stdc++.h>
using namespace std;
int inf = 0x7f7f7f7f;
int edge[1100][1100];
int dist[1100];
bool visit[1100];
int main() {
fill(edge[0], edge[0] + 1100 * 1100, inf);
int nv, ne;
cin >> nv >> ne;
for(int i = 0; i < ne; i++) {
int a, b, weight;
cin >> a >> b >> weight;
edge[a][b] = edge[b][a] = weight;
}
//cout << edge[3][4] << endl;
// 开始判断
int k;
cin >> k;
for(int i = 0; i < k; i++) {
// 记录一下待判断的seq
vector<int> v(nv);
// 存一下
for(int j = 0; j < nv; j++)
cin >> v[j];
//cout << v[0] << endl;
// 开始判断
// 初始化dist, visit
fill(dist, dist + 1100, inf);
fill(visit, visit + 1100, false);
// 起始点
dist[v[0]] = 0;
// 依次检查
bool flag = true;
for(int j = 0; j < nv; j++) {
// 寻找最小的dist, 判断是否符合
int minn = inf;
vector<int> record;
for(int k = 1; k <= nv; k++) {
if(visit[k] == false) {
if(dist[k] == minn) record.push_back(k);
else if(dist[k] < minn) {
minn = dist[k];
record.clear();
record.push_back(k);
}
}
}
int checkpoint = -1;
/* for(int k = 0; k < record.size(); k++) cout << record[k] << " "; cout << endl; */
for(int k = 0; k < record.size(); k++) {
if(record[k] == v[j]) {
checkpoint = k;
break;
}
}
// 看看能不能找到
if(checkpoint == -1) {
flag = false;
break;
}
// 如果可以找到
int u = v[j];
visit[u] = true;
// 后面更新dist
for(int v = 1; v <= nv; v++) {
if(visit[v] == false) {
if(dist[v] > dist[u] + edge[u][v]) dist[v] = dist[u] + edge[u][v];
}
}
}
if(flag == false)
cout << "No" << endl;
else cout << "Yes" << endl;
}
return 0;
}
复现代码
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int vis[1005],dis[1005],edge[1005][1005];
int main()
{
memset(edge,inf,sizeof(edge));
int nv,ne;
cin>>nv>>ne;
while(ne--){
int x,y,z;
cin>>x>>y>>z;
edge[x][y]=edge[y][x]=z;
}
int cnt;
cin>>cnt;
while(cnt--){
vector<int> v(nv);
for(int i=0;i<nv;i++){
cin>>v[i];
}
fill(dis,dis+1005,inf);
fill(vis,vis+1005,0);
dis[v[0]]=0;//注意顺序
int flag=1;
for(int t=0;t<nv;t++){
int minn=inf;
vector<int> point;
for(int i=0;i<nv;i++){
if(!vis[v[i]]){
if(dis[v[i]]<minn){
minn=dis[v[i]];
point.clear();
point.push_back(v[i]);
}
else if(dis[v[i]]==minn){
point.push_back(v[i]);
}
}
}
int check=-1;
for(int i=0;i<point.size();i++){
if(point[i]==v[t]){
check=point[i];
}
}
if(check==-1){
flag=0;
break;
}
int u=v[t];
vis[u]=1;
for(int v=1;v<=nv;v++){
if(!vis[v]&&dis[u]+edge[u][v]<dis[v]){
dis[v]=dis[u]+edge[u][v];
}
}
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
参考文章
边栏推荐
- NebulaGraph v3.2.0 性能报告
- NebulaGraph v3.2.0 Performance Report
- Dameng replaces the officially authorized dm.key
- 人像分割技术解析与应用
- postgresql之page分配管理(一)
- How do we do full-link grayscale on the database?
- 高仿项目协作工具【Worktile】,从零带你一步步实现组织架构、网盘、消息、项目、审批等功能
- Grafana 9.0 released, Prometheus and Loki query builders, new navigation, heatmap panels and more!
- iframe tag attribute description detailed [easy to understand]
- Grafana9.0发布,Prometheus和Loki查询生成器、全新导航、热图面板等新功能!
猜你喜欢

如何使用OpenCV测量图像中物体之间的距离

What is consistent hashing?In what scenarios can it be applied?

Feign 从注册到调用原理分析

重磅消息 | Authing 实现与西门子低代码平台的集成

JMP Pro 16.0 software installation package download and installation tutorial

Programmer's Romantic Tanabata

NebulaGraph v3.2.0 Performance Report

全链路灰度在数据库上我们是怎么做的?

How do we do full-link grayscale on the database?

树和二叉树的转换
随机推荐
Beyond Compare 4 试用期到期
Data Mining-04
Dapr 与 NestJs ,实战编写一个 Pub & Sub 装饰器
数据湖 delta lake和spark版本对应关系
硬链接、软连接浅析
LeetCode_动态规划_中等_377.组合总和 Ⅳ
如何将第三方服务中心注册集成到 Istio ?
How much do you know about Amazon reviews?
大中型网站列表页翻页过多怎么优化?
Find objects with the same property value Cumulative number Summarize
Meshlab & Open3D SOR filtering
What Can Service Mesh Learn from SDN?
多线程案例——阻塞式队列
AI目标分割能力,无需绿幕即可实现快速视频抠图
What is consistent hashing?In what scenarios can it be applied?
Istio投入生产的障碍以及如何解决这些问题
postgresql之page分配管理(一)
Do wildcard SSL certificates not support multiple domains?
Process sibling data into tree data
关于亚马逊测评,你了解多少?