隨想錄 Day 72 拓撲排序、最短路徑 樸素dijkstra

隨想錄 Day 72 拓撲排序、最短路徑 樸素dijkstra

117. 軟件構建

117. 軟件構建

時間限制:1.000S 空間限制:256MB
題目描述
某個大型軟件項目的構建系統擁有 N 個文件,文件編號從 0 到 N - 1,在這些文件中,某些文件依賴于其他文件的內容,這意味著如果文件 A 依賴于文件 B,則必須在處理文件 A 之前處理文件 B (0 <= A, B <= N - 1)。請編寫一個算法,用于確定文件處理的順序。
輸入描述
第一行輸入兩個正整數 N, M。表示 N 個文件之間擁有 M 條依賴關系。

后續 M 行,每行兩個正整數 S 和 T,表示 T 文件依賴于 S 文件。

輸出描述
輸出共一行,如果能處理成功,則輸出文件順序,用空格隔開。

如果不能成功處理(相互依賴),則輸出 -1。

輸入示例
5 4
0 1
0 2
1 3
2 4
輸出示例
0 1 2 3 4

提交:這里沒必要像題解一樣用umap

接下來我給出 拓撲排序的過程,其實就兩步:

找到入度為0 的節點,加入結果集

將該節點從圖中移除

# include <iostream>
# include <vector>
# include <queue>
using namespace std;
int n , m;
int main() {cin>> n >> m;vector<int> inCnt(n , 0);vector<vector<int> > edges(n);for (int i = 0; i < m; i++) {int start, end;cin >> start >> end;edges[start].push_back(end);inCnt[end]++;}// for (int i = 0; i < n; i++) {//     cout << inCnt[i]<<" ";// }//cout << endl;//int cnt = 0;queue<int> out;for (int i = 0; i < n; i++) {if (inCnt[i] == 0) {out.push(i);}}vector<int> res;while(out.size() != 0 ) {int now = out.front();out.pop();res.push_back(now);for (int j : edges[now]) {inCnt[j]--;if (inCnt[j] == 0) out.push(j);}}///注意這里輸出格式if (res.size() == n) {for (int i = 0; i < n; i++) {if (i == n-1) cout << res[i];else cout<< res[i] << " ";}} else cout << -1;
}

47. 參加科學大會

7. 參加科學大會(第六期模擬筆試)

時間限制:1.500S 空間限制:128MB
題目描述
小明是一位科學家,他需要參加一場重要的國際科學大會,以展示自己的最新研究成果。

小明的起點是第一個車站,終點是最后一個車站。然而,途中的各個車站之間的道路狀況、交通擁堵程度以及可能的自然因素(如天氣變化)等不同,這些因素都會影響每條路徑的通行時間。

小明希望能選擇一條花費時間最少的路線,以確保他能夠盡快到達目的地。

輸入描述
第一行包含兩個正整數,第一個正整數 N 表示一共有 N 個公共汽車站,第二個正整數 M 表示有 M 條公路。

接下來為 M 行,每行包括三個整數,S、E 和 V,代表了從 S 車站可以單向直達 E 車站,并且需要花費 V 單位的時間。

輸出描述
輸出一個整數,代表小明從起點到終點所花費的最小時間。
輸入示例
7 9
1 2 1
1 3 4
2 3 2
2 4 5
3 4 2
4 5 3
2 6 4
5 7 4
6 7 9
輸出示例
12

提交

為了防止intmax越界,這里用了intmax/2,作比較

# include <iostream>
# include <vector>
# include <climits>
using namespace std;
int n, m;int main() {cin>> n >> m;vector<vector<int> > map(n + 1, vector<int>(n + 1, INT_MAX/2));for (int i = 0; i < m ; i++) {int start, end, weight;cin>> start>> end >> weight;//cout << start << end << weight << endl;map[start][end] = weight;}vector <bool> visited(n + 1, false);vector <int> minDis(n+1, INT_MAX/2);visited[0] = true;minDis[0] = 0;minDis[1] = 0;visited[1] = true;int now = 1;int res = 0;for (int t = 0; t < n-1; t++) {//update minDisint minD = INT_MAX/2, inIndex = -1;for (int i = 1; i <= n; i++) {if (visited[i] == false) {//cout << i << "original " << minDis[i] << endl;minDis[i] = min(minDis[i], minDis[now] + map[now][i]);if (minDis[i] < minD) {minD = minDis[i];inIndex = i;}//cout << i << "changed " << minDis[i] << endl;}}//find target point and visited = trueif (minD == INT_MAX/2) break;//cout << inIndex << "chosen one " << minDis[inIndex] << endl;visited[inIndex] = true;now = inIndex;//res = minD;}if(visited[n] == true){cout << minDis[n];}else {cout << -1;}//cout << res;
}

優化一下不會intmax越界,多加一個有沒有邊的判斷(很自然)

# include <iostream>
# include <vector>
# include <climits>
using namespace std;
int n, m;int main() {cin>> n >> m;vector<vector<int> > map(n + 1, vector<int>(n + 1, INT_MAX));for (int i = 0; i < m ; i++) {int start, end, weight;cin>> start>> end >> weight;//cout << start << end << weight << endl;map[start][end] = weight;}vector <bool> visited(n + 1, false);vector <int> minDis(n+1, INT_MAX);visited[0] = true;minDis[0] = 0;minDis[1] = 0;visited[1] = true;int now = 1;int res = 0;for (int t = 0; t < n-1; t++) {//update minDisint minD = INT_MAX, inIndex = -1;for (int i = 1; i <= n; i++) {if (visited[i] == false) {//cout << i << "original " << minDis[i] << endl;if (map[now][i] != INT_MAX) {minDis[i] = min(minDis[i], minDis[now] + map[now][i]);}if (minDis[i] < minD) {minD = minDis[i];inIndex = i;}//cout << i << "changed " << minDis[i] << endl;}}//find target point and visited = trueif (minD == INT_MAX) break;//cout << inIndex << "chosen one " << minDis[inIndex] << endl;visited[inIndex] = true;now = inIndex;//res = minD;}if(visited[n] == true){cout << minDis[n];}else {cout << -1;}//cout << res;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36508.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36508.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36508.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode刷題之HOT100之課程表

吃完普通的食堂飯菜&#xff0c;回到實驗室&#xff0c;繼續做一道題&#xff01; 1、題目描述 2、邏輯分析 這道題涉及到圖相關知識&#xff0c;應用到了拓撲排序。 題意解釋 一共有 n 門課要上&#xff0c;編號為 0 ~ n-1。先決條件 [1, 0]&#xff0c;意思是必須先上課 0…

觸動心弦的成語之旅:《米小圈動畫成語》帶你走進中華智慧

成語&#xff0c;這些古老而典雅的語言精華&#xff0c;如同中華文化的晶瑩明珠&#xff0c;閃耀著歷史的光輝和智慧的火花。從古至今&#xff0c;它們在中國人的日常交流中扮演著重要角色&#xff0c;不僅傳遞著深刻的哲理和文化內涵&#xff0c;更是凝聚了世代智者的思想和智…

mindspore打卡第幾天 DDPM 之Unet 網絡解析markdown版本

mindspore打卡第幾天 DDPM 之Unet 網絡解析markdown版本 A: 為啥DDPM的unet網絡的下采樣這部分的channel是從20 32 64 128這樣上升的&#xff1f;從U形結構看不應該是下降的 &#xff5b;Block1 --> block2 --> Res&#xff08;attn&#xff09;-- >dowmsample&#…

20240622服務器異常

異常表現 玩法無法登錄服務器&#xff0c;遠程XShell 無法連接到服務器,IT 后臺查看服務器內存使用完畢。 異常處理 IT 直接重啟服務器 后續異常 Docker 服務器無法啟動 使用命令查看錯誤&#xff1a; sudo systemctl status docker.service docker.service - Docker Ap…

【Linux】線程id與互斥(線程三)

上一期我們進行了線程控制的了解與相關操作&#xff0c;但是扔就有一些問題沒有解決 本章第一階段就是解決tid的問題&#xff0c;第二階段是進行模擬一個簡易線程庫&#xff08;為了加深對于C庫封裝linux原生線程的理解&#xff09;&#xff0c;第三階段就是互斥。 目錄 線程id…

鏈在一起怎么聯機 鏈在一起遠程同玩聯機教程

steam中最近特別熱門的多人跑酷冒險的游戲&#xff1a;《鏈在一起》&#xff0c;英文名稱叫做Chained Together&#xff0c;在游戲中我們需要開始自己的旅程&#xff0c;在地獄的深處&#xff0c;與我們的同伴被鏈在一起。我們的任務是通過盡可能高的攀登逃離地獄。每一次跳躍都…

Python第三方庫GDAL 安裝

安裝GDAL的方式多種&#xff0c;包括pip、Anaconda、OSGeo4W等。筆者在安裝過程中&#xff0c;唯獨使用pip安裝遇到問題。最終通過輪子文件&#xff08;.whl&#xff09;成功安裝。 本文主要介紹如何下載和安裝較新版本的GDAL輪子文件。 一、GDAL輪子文件下載 打開Github網站…

Python學習打卡:day16

day16 筆記來源于&#xff1a;黑馬程序員python教程&#xff0c;8天python從入門到精通&#xff0c;學python看這套就夠了 目錄 day16116、SQL 基礎和 DDLSQL的概述SQL語言的分類SQL的語法特征DDL — 庫管理DDL — 表管理 117、SQL — DMLDML概述數據插入 INSERT數據刪除 DEL…

深入理解 Dubbo:分布式服務框架的核心原理與實踐

目錄 Dubbo 概述Dubbo 的架構Dubbo 的關鍵組件 服務提供者&#xff08;Provider&#xff09;服務消費者&#xff08;Consumer&#xff09;注冊中心&#xff08;Registry&#xff09;監控中心&#xff08;Monitor&#xff09;調用鏈追蹤&#xff08;Trace&#xff09; Dubbo 的…

電腦瀏覽器問題

網絡連接正常&#xff0c;但是瀏覽器就是打不開網頁&#xff0c;顯示未連接什么的。 搞了半天&#xff0c;不是代理服務器問題。 也不是端口問題。 也不是軟件版本問題。 竟然是瀏覽器插件的問題&#xff0c;插件禁用&#xff0c;奇跡般的好了。 參考&#xff1a; 電腦有網…

專題頁面設計指南:從構思到實現

如何設計專題頁&#xff1f;你有什么想法&#xff1f;專題頁的設計主要以發揚產品優勢為核心。一個好的專題頁可以從不同的角度向用戶介紹產品&#xff0c;擴大產品的相關優勢&#xff0c;表達產品的優勢&#xff0c;讓用戶在短時間內了解產品。因此&#xff0c;在設計詳細信息…

純血鴻蒙Beta版本發布,中國華為,站起來了!

2024年6月21日至23日&#xff0c;華為開發者大會2024&#xff08;HDC 2024&#xff09;于東莞盛大舉行。 此次大會不僅在會場設置了包括鴻蒙原生應用、統一生態統一互聯等在內的11個展區&#xff0c;以供展示HarmonyOS NEXT的強大實力&#xff0c;還對外宣布了HarmonyOS的最新進…

240627_關于CNN中圖像維度變化問題

240627_關于CNN中圖像維度變化問題 在學習一些經典模型時&#xff0c;其中得維度變化關系總搞不太明白&#xff0c;集中學習了以下&#xff0c;在此作以梳理總結&#xff1a; 一般來說涉及到的維度變換都是四個維度&#xff0c;當batch size4&#xff0c;圖像尺寸為640*640&a…

kylin v10 離線安裝chrome centos離線安裝chrome linux離線安裝谷歌瀏覽器

1. 先用自己聯網的計算機&#xff0c;下載離線安裝包&#xff0c;瀏覽器輸入鏈接下載安裝包&#xff1a; https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 1.2. 信創環境不用執行下面&#xff0c;因為沒網 1.3. 若為阿里云服務器&#xff0c;或服…

深度學習驅動的圖像識別革命

深度學習驅動的圖像識別革命正在徹底改變我們處理、分析和理解視覺信息的方式。以下是對這一革命的分點表示和歸納&#xff1a; 深度學習在圖像識別中的基本原理 特征提取&#xff1a;深度學習通過構建多層神經網絡&#xff0c;能夠自動從原始圖像數據中提取出復雜的特征&…

【第4章】MyBatis-Plus持久層接口之Service Interface(下)

文章目錄 前言一、get1. 示例(getById)2. 示例&#xff08;getOne&#xff09;3. 示例&#xff08;getOne 不拋出異常&#xff09;4. 示例&#xff08;getMap&#xff09;5. 示例&#xff08;getObj&#xff09; 二、list1. 示例&#xff08;list&#xff09;2. 示例&#xff0…

AR導航技術加持,圖書館閱讀體驗智慧升級

在信息爆炸的今天&#xff0c;圖書館作為知識的寶庫&#xff0c;其藏書量和種類日益增多。然而&#xff0c;傳統的圖書館導航方式已逐漸無法滿足用戶對快速、準確定位圖書的需求。本文將探討圖書館AR地圖導航的實現原理、技術優勢、功能特點以及市場前景&#xff0c;揭示為何AR…

VS studio2019配置遠程連接Ubuntu

VS studio2019配置遠程連接Ubuntu 1、網絡配置 &#xff08;1&#xff09;獲取主機IP &#xff08;2&#xff09;獲取Ubuntu的IP &#xff08;3&#xff09;在 windows 的控制臺中 ping 虛擬機的 ipv4 地址&#xff0c;在 Ubuntu 中 ping 主機的 ipv4 地址。 ubuntu: ping…

【Linux】對共享庫加載問題的深入理解——基本原理概述

原理概述 【linux】詳解——庫-CSDN博客 共享庫被加載后&#xff0c;系統會為該共享庫創建一個結構&#xff0c;這個結構體中的字段描述了庫的各種屬性。在內存中可能會加載很多庫&#xff0c;每一個庫都用一個結構體描述。把這些結構體用一些數據結構管理起來&#xff0c;系…

WordPress Dokan Pro插件 SQL注入漏洞復現(CVE-2024-3922)

0x01 產品簡介 WordPress Dokan Pro插件是一款功能強大的多供應商電子商務市場解決方案,功能全面、易于使用的多供應商電子商務平臺解決方案,適合各種規模的電商項目。允許管理員創建一個多賣家平臺,賣家可以注冊賬戶并在平臺上創建自己的店鋪,展示和銷售自己的產品。提供…