《算法筆記》10.6小節——圖算法專題->拓撲排序 問題 C: Legal or Not

題目描述

ACM-DIY is a large QQ group where many excellent acmers get together. It is so harmonious that just like a big family. Every day,many "holy cows" like HH, hh, AC, ZT, lcc, BF, Qinz and so on chat on-line to exchange their ideas. When someone has questions, many warm-hearted cows like Lost will come to help. Then the one being helped will call Lost "master", and Lost will have a nice "prentice". By and by, there are many pairs of "master and prentice". But then problem occurs: there are too many masters and too many prentices, how can we know whether it is legal or not?We all know a master can have many prentices and a prentice may have a lot of masters too, it's legal. Nevertheless,some cows are not so honest, they hold illegal relationship. Take HH and 3xian for instant, HH is 3xian's master and, at the same time, 3xian is HH's master,which is quite illegal! To avoid this,please help us to judge whether their relationship is legal or not. Please note that the "master and prentice" relation is transitive. It means that if A is B's master ans B is C's master, then A is C's master.

輸入

The input consists of several test cases. For each case, the first line contains two integers, N (members to be tested) and M (relationships to be tested)(2 <= N, M <= 100). Then M lines follow, each contains a pair of (x, y) which means x is y's master and y is x's prentice. The input is terminated by N = 0.TO MAKE IT SIMPLE, we give every one a number (0, 1, 2,..., N-1). We use their numbers instead of their names.

輸出

For each test case, print in one line the judgement of the messy relationship.If it is legal, output "YES", otherwise "NO".

樣例輸入
4 3
0 1
1 2
2 3
3 3
0 1
1 2
2 0
0 1
樣例輸出
YES
NO

分析:給出 n 個點,m 條邊的圖,問這個圖是否是有向無環圖。進行拓撲排序即可。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define INF 0x3fffffff
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,r) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<endl
#define db5(x,y,z,r,w) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<", "<<#w<<"="<<(w)<<endl
using namespace std;bool TopologicalSort(int in[],int n,vector<int>dag[])
{
//    bool vis[n+5]={0};int cnt=0;queue<int>que;for(int i=0;i<n;++i){if(in[i]==0)que.push(i);}while(!que.empty()){int temp=que.front();que.pop();cnt++;int len=dag[temp].size();for(int i=0;i<len;++i){int index=dag[temp][i];in[index]--;if(in[index]==0)que.push(index);}}if(cnt==n)return true;return false;
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);clock_t start=clock();#endif //testint n,m;while(scanf("%d%d",&n,&m),n){int in[n+5]={0};vector<int>dag[n+5];for(int i=0;i<m;++i){int a,b;scanf("%d%d",&a,&b);dag[a].push_back(b);in[b]++;}bool ans=TopologicalSort(in,n,dag);if(ans==1)printf("YES\n");else printf("NO\n");}#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s為單位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms為單位#endif //testreturn 0;
}

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

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

相關文章

博客信息管理/博客管理

&#x1f6e0; 博客管理模塊&#xff1a;設計建議 你應該以To B 的后臺系統思路來設計&#xff0c;但保持簡單、輕量級、自己易維護是關鍵。下面是針對你這個場景的建議。 &#x1f9f1; 前端頁面結構&#xff08;React/Vue 可用&#xff09; 頁面 說明 博客列表頁 展示所有博…

全平臺開源即時通訊IM框架MobileIMSDK:7端+TCP/UDP/WebSocket協議,鴻蒙NEXT端已發布,5.7K Stars

一、基本介紹 MobileIMSDK是一套全平臺原創開源IM通信層框架&#xff1a; 超輕量級、高度提煉&#xff0c;lib包50KB以內&#xff1b;精心封裝&#xff0c;一套API同時支持UDP、TCP、WebSocket三種協議&#xff08;可能是全網唯一開源的&#xff09;&#xff1b;客戶端支持iOS…

SpringBoot商城平臺系統設計與開發

概述 SpringBoot商城平臺系統實現了商品展示、購物車、訂單管理等商城核心功能&#xff0c;適合作為計算機專業設計項目或商城項目開發參考&#xff0c;實現商城平臺的核心功能&#xff0c;學習商品管理、訂單處理、支付集成等關鍵技術實現。 主要內容 1. 前臺用戶功能模塊 …

【網絡原理】深入理解HTTPS協議

本篇博客給大家帶來的是網絡原理的知識點, 由于時間有限, 分三天來寫, 本篇為線程第三篇,也是最后一篇. &#x1f40e;文章專欄: JavaEE初階 &#x1f680;若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分享給誰,那就分享給薯條. 你們的支持是我不斷創作的動…

【C語言練習】018. 定義和初始化結構體

018. 定義和初始化結構體 018. 定義和初始化結構體1. 定義結構體示例1:定義一個簡單的結構體輸出結果2. 初始化結構體示例2:在聲明時初始化結構體輸出結果示例3:使用指定初始化器初始化結構體(C99及以上標準支持)輸出結果3. 結構體數組示例4:定義和初始化結構體數組輸出結…

3D版同步幀游戲

以下是實現一個3D版同步幀游戲的詳細步驟與完整代碼示例。我們將以第一人稱射擊游戲(FPS)為原型,重點講解3D空間中的同步機制優化。 項目升級:3D版核心改動 1. 3D坐標系與消息結構 // common/messages.go type Vector3 struct {X float32 `json:"x"`Y float32 `…

卷積神經網絡進化史:從LeNet-5到現代架構的完整發展脈絡

摘要 本文系統梳理卷積神經網絡(CNN)從誕生到繁榮的發展歷程。從1998年Yann LeCun開創性的LeNet-5出發&#xff0c;重點解析2012年引爆深度學習革命的AlexNet&#xff0c;并詳細拆解后續演進的五大技術方向&#xff1a;網絡深度化(VGG)、卷積功能強化(ResNet)、檢測任務遷移(F…

在 Windows 中安裝 Pynini 的記錄

#工作記錄 概述 Pynini 是一個用于加權有限狀態文法編譯的 Python 庫&#xff0c;廣泛應用于自然語言處理&#xff08;NLP&#xff09;領域。以下記錄旨在用于回顧和幫助大家在 Windows 系統中安裝 Pynini。 安裝思路&#xff1a; 優先用conda虛擬環境 或 在python3.12的vir…

深挖Java之:運算符與輸入器

今天我要介紹的是在Java中對于運算符與輸入器的一些基礎語法運算符與輸入器的代碼示例以及應用場景&#xff0c;他們在應用上的優勢與劣勢作說明介紹&#xff1a; 介紹&#xff1a;運算符與輸入器是兩個基礎且關鍵的概念&#xff0c;它們共同構成了程序與用戶、程序與數據之間…

動態規劃之多狀態問題1

題目解析&#xff1a; 也就是給一個預約數組&#xff0c;選擇一些數字&#xff0c;讓其總和最大&#xff0c;但不能選擇相鄰的兩個數字 算法原理&#xff1a; 依舊可以根據經驗題目 以dp[i]位置結尾時&#xff0c;巴拉巴拉 根據題目要求補充完整&#xff0c;dp[i]&#xff…

計網_可靠傳輸ARQ機制

2024.09.04&#xff1a;網工老姜&beokayy網工學習筆記 第5節 可靠傳輸機制 5.1 可靠傳輸5.2 ARQ機制、ARQ協議5.3 ARQ簡介&#xff08;可靠傳輸&#xff09;5.3.1 停止等待協議&#xff08;1&#xff09;無差錯情況&#xff08;2&#xff09;有差錯情況確認丟失確認遲到 5.…

華為eNSP:多區域集成IS-IS

一、什么是多區域集成IS-IS&#xff1f; 多區域集成IS-IS是一種基于中間系統到中間系統&#xff08;IS-IS&#xff09;協議優化的網絡架構設計&#xff0c;通過多區域協同、路徑優化和擴展性增強實現高效路由管理&#xff0c;其核心特征如下&#xff1a; 1、分布式架構與多區…

自定義Dockerfile,發布springboot項目

(1) 上傳jar包 把hello項目打成一個可執行的jar包 hello-1.0-SNAPSHOT.jar&#xff0c;把這個jar包上傳到linux中 (2) 創建文件&#xff0c;文件名my_hello&#xff08;就是一個Dockerfile&#xff09;&#xff0c;內容如下 #1.定義父鏡像(定義當前工程依賴的環境)&#xff1a;…

vscode源代碼管理Tab-文件右側標志(M、A 等)的含義

Git 常用標志(M、A 等)的含義 在 VSCode 的源代碼管理&#xff08;Source Control&#xff09;標簽頁中&#xff0c;文件右側顯示的 Monaco 裝飾徽章&#xff08;Badge&#xff09;&#xff08;如 M、A 等&#xff09;&#xff0c;本質上是對 Git 文件狀態標志 的可視化呈現。…

基于 vue-flow 實現可視化流程圖

vue-flow 是一個基于 Vue.js 的強大且靈活的可視化流程圖庫&#xff0c;它允許開發者輕松創建交互式的流程圖、工作流圖、節點圖等。 主要特點 易于使用 &#xff1a;提供了簡潔的 API 和組件&#xff0c;開發者可以快速上手并創建復雜的流程圖。高度可定制 &#xff1a;支持…

【愚公系列】《Manus極簡入門》015-時間管理顧問:“商業時間規劃大師”

&#x1f31f;【技術大咖愚公搬代碼&#xff1a;全棧專家的成長之路&#xff0c;你關注的寶藏博主在這里&#xff01;】&#x1f31f; &#x1f4e3;開發者圈持續輸出高質量干貨的"愚公精神"踐行者——全網百萬開發者都在追更的頂級技術博主&#xff01; &#x1f…

OpenRouter:輕松集成多家AI大模型的統一接口平臺指南

想象一下&#xff0c;你已經在系統中集成了 OpenAI API&#xff0c;但現在你希望通過 Google Gemini 和 Anthropic API 擴展能力。你會為每個服務商單獨創建和管理賬戶&#xff0c;使用不同的 SDK&#xff0c;讓代碼變得更加復雜嗎&#xff1f;還是更傾向于只用一行代碼就能訪問…

iOS啟動優化:從原理到實踐

前言 在iOS應用開發中&#xff0c;啟動速度是影響用戶體驗的重要因素之一。研究表明&#xff0c;啟動時間每增加1秒&#xff0c;用戶留存率就會下降約7%。本文將深入探討iOS啟動優化的各個方面&#xff0c;從底層原理到具體實踐&#xff0c;幫助開發者打造更快的應用啟動體驗。…

洛谷 P1850 [NOIP 2016 提高組] 換教室

題目傳送門 前言 終于自己想出概率期望 d p dp dp 的狀態了&#xff0c;但是依舊沒能相對轉移方程。&#xff08;招笑&#xff09; 暴力 這題部分分和特殊情況分給的挺多的&#xff0c;所以先拿部分分。 一、思路 先跑一邊 F l o y d Floyd Floyd 最短路求出兩點間最短距…

基于Springboot+Vue3.0的前后端分離的個人旅游足跡可視化平臺

文章目錄 0、前言1、前端開發1.1 登錄注冊頁面1.2 首頁1.3 足跡管理1.3.1 足跡列表1.3.2 添加足跡1.4 個人中心1.4.1 足跡成就1.4.2 個人信息1.4.3 我的計劃2、后端開發2.1 用戶接口開發2.2 足跡點接口2.3 旅游計劃接口3、完整代碼資料下載0、前言 項目亮點: 前端用戶權限動態…