1. 程式人生 > >洛谷 P1983 車站分級(搜尋_圖論)

洛谷 P1983 車站分級(搜尋_圖論)

傳送門

每次從所有停靠的車站往不停靠的車站把沒建過的邊建一次。
由於保證資料符合要求,圖是沒有環的,所以直接深搜跑最長路找最多的級別數。

Code:

#include<cstdio>
#include<cstdlib>
#include<cstring>

struct node{int x,y,next;}e[1000010];
bool v[1010],even[1010][1010],in[1010];
int m,n,a[1010],b[1010],first[1010],len(0),dis[1010],ans=0;

void ins(int x,int y) {len++;e[len].x=x;e[len].y=y;e[len].next=first[x];first[x]=len;}

void
dfs(int x,int num) { if(num<=dis[x]) return; dis[x]=num; for(int i=first[x];i;i=e[i].next) dfs(e[i].y,num+1); } int main() { memset(even,false,sizeof(even)); scanf("%d %d",&n,&m); for(int k=1;k<=m;k++) { memset(v,false,sizeof(v)); int
d,t=0;scanf("%d",&d); for(int i=1;i<=d;i++) { scanf("%d",&a[i]); v[a[i]]=true; } for(int i=a[1];i<=a[d];i++) if(!v[i]) b[++t]=i; for(int i=1;i<=d;i++) for(int j=1;j<=t;j++) if(!even[a[i]][b[j]]) { even[a[i]][b[j]]=true
; ins(a[i],b[j]); in[b[j]]=true; } } for(int i=1;i<=n;i++) if(!in[i]) dfs(i,1); for(int i=1;i<=n;i++) if(ans<dis[i]) ans=dis[i]; printf("%d",ans); }

相關推薦

P1983 車站分級搜尋_

傳送門 每次從所有停靠的車站往不停靠的車站把沒建過的邊建一次。 由於保證資料符合要求,圖是沒有環的,所以直接深搜跑最長路找最多的級別數。 Code: #include<cstdio&g

P1113 雜務搜尋_

傳送門 從某項工作的準備工作往該工作建邊(這裡用的vector),然後從第一個節點直接跑深搜求距離。 Code: #include<cstdio> #include<cs

P1983 車站分級 拓撲排序

Code: #include<cstdio> #include<queue> #include<algorithm> #include<cstring> using namespace std; const int N=1000+1; co

P1983 車站分級

題目:車站分級 思路: 根據每條線路,把經過的不停的站向停的站連邊。 然後跑一遍拓撲排序就好了。 程式碼: #include<bits/stdc++.h> using namespace std; #define maxn 1000 #define read(x

P1983車站分級題解

題目 這個題非常毒瘤,只要還是體現在其思維難度上,因為要停留的車站的等級一定要大於不停留的車站的等級,因此我們可以從不停留的車站向停留的車站進行連邊,然後從入度為0的點即不停留的點全都入隊,然後拓撲排序即可 程式碼 #include <bits/stdc++.h> #pragma GCC o

P1983 車站分級

這題有三種做法 1.O(nm2)1.O(nm2) 488ms / 9.61MB / 0.68KB 不用講,直接貼程式碼 #include<bits/stdc++.h> using namespace std; const int

P1983 車站分級 解題報告

這題卡了2天 看到該題的第一想法是貪心 然後就碼了一個 結果不知道哪裡寫掛了才拿40分 後面就寫了個拓撲 結果一開始思路不對 每次while的時候ans++ 後面才發現bug 然後修正了一下就A了 #include <iostream>#include &

P1525 關押罪犯二分+二分染色

P1525 關押罪犯 問題描述 S城現有兩座監獄,一共關押著N名罪犯,編號分別為1~N。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用“怨氣值”(一個

1363——幻想迷宮搜尋

傳送門 最近真的是越來越菜了 真的什麼都做不起了 連搜尋都不會了 可以把整個平面想象成很多張原始的圖拼起來 因為可以在不同的圖裡面走 走到不同的圖就相當於一個取模操作 而如果在不同的圖中走到了同一個位置 那麼也就是說可以這樣無線走下去 所以我們給vis陣列開三維

U360 子矩陣 NOIP模擬賽T1題解

題解 實現 oid ac代碼 格式 memset algorithm min ons 題目鏈接:https://www.luogu.org/problem/show?pid=U360 題目背景 夏令營 題目描述 小A有一個N×M的矩陣,矩陣中1~N*M這

P1158 導彈攔截不是那個DP 解題報告

HR turn ons strong 自信心 貪心 做了 結果 輸入格式 P1158 導彈攔截 題目描述 經過1111年的韜光養晦,某國研發出了一種新的導彈攔截系統,凡是與它的距離不超過其工作半徑的導彈都能夠被它成功攔截。當工作半徑為0時,則能夠攔截與它位置恰好相同的導彈。

P2221 [HAOI2012]高速公路線段樹+概率期望

open alc long long const git calc gcd 一個 數列求和 傳送門 首先,答案等於$$ans=\sum_{i=l}^r\sum_{j=i}^r\frac{sum(i,j)}{C_{r-l+1}^2}$$ 也就是說所有情況的和除以總的

【題解】P3959 [NOIP2017TG] 寶藏狀壓DP+DFS

洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017時還很弱(現在也很弱 看出來是DP 但是並不會狀壓DP 現在看來思路並不複雜 只是存狀態有點難想到 思路 因為n最大為12 所以可以想到是狀壓  

P4147 玉蟾宮 最大子矩形問題

這道題用到了懸線法,非常牛逼,可以看這個論文。 #include<cstdio> #include<cstring> #include<iostream> #i

P1613 跑路DP +倍增 + 最短路

任重而道遠 題目描述 小A的工作不僅繁瑣,更有苛刻的規定,要求小A每天早上在6:00之前到達公司,否則這個月工資清零。可是小A偏偏又有賴床的壞毛病。於是為了保住自己的工資,小A買了一個十分牛B的空間跑路器,每秒鐘可以跑2^k千米(k是任意自然數)。當然,這個機器是用lon

1784 數獨hdu 1426 Sudoku Killer

洛谷1784 數獨: 首先題意是,給你一個9x9的未填滿的數獨(未填滿用0表示),要求你將這些0的位置上填上數字,以滿足數獨的特性。 解析: 其實這道題爆搜就行,畢竟只是9x9的數獨,直接從每個0的位置開始搜即可 上程式碼: #include <bits/

P1044 :棧卡特蘭數

https://www.luogu.org/problemnew/show/P1044 題目背景 棧是計算機中經典的資料結構,簡單的說,棧就是限制在一端進行插入刪除操作的線性表。 棧有兩種最重要的操作,即pop(從棧頂彈出一個元素)和push(將一個元素進棧)。 棧的重要性不言自

bzoj2242,2485----SDOI2011計算器exgcd,qsm,bsgs模板

就是一道模板題! 這裡再強調一下 BSGS 考慮方程\(a^x = b \pmod p\) 已知a,b,p\((2 \le p\le 10^9)\),其中p為質數,求x的最小正整數解 解法: 注意到如果有解,那麼一定滿足\(0<x<p\) 設\(t=\lfloor \sqrt p \rflo

【演算法練習】P1608 路徑統計SPFA最短路計數

題意 求最短路徑的數目,可能用重邊。 題解 SPFA,為了保證不會重複計算,需要維護一個當前佇列中到這些頂點的次數,每次出隊時清零。 程式碼 // luogu-judger-enable-o2 #include<bits/stdc++

p1010冪次方分治加遞迴

洛谷p1010冪次方(分治加遞迴)題目連結 方法一:分治加遞迴 程式碼如下 #include<cstdio> #include<iostream> const int maxx=50; using namespace std; int number[maxx]