1. 程式人生 > >洛谷 P1983 車站分級 解題報告

洛谷 P1983 車站分級 解題報告

這題卡了2天

看到該題的第一想法是貪心

然後就碼了一個

結果不知道哪裡寫掛了才拿40分

後面就寫了個拓撲

結果一開始思路不對

每次while的時候ans++

後面才發現bug

然後修正了一下就A了

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int ind[1010],to[1000000],next[1000000],st[1000000],n,m,a[1010],num,topt,ans[1010],si,maxn,head=1,tail,q[10000000

];
bool f[1010],map[1010][1010];
int read(){
    int x=0; char ch=getchar();
    while (ch<'0' || ch>'9') ch=getchar(); while (ch>='0' && ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x;
}
void add(int x,int y){
    to[++topt]=y;
    next[topt]=st[x];
    st[x]=topt;
}
void pushq(int x){
    q[++tail]=x;
}
void
popq(void)
{
    q[head++]=0;
}                                                  ///手打佇列23333因為一開始T了還以為卡常了 然而並不是 之前T了是被卡層了
int main(){
    n=read(); m=read();
    for (int kk=1;kk<=m;kk++)
    {
        memset(f,0,sizeof f);
        num=read();
        for (int i=1;i<=num;i++) {a[i]=read(); f[a[i]]=1
;}
        if (a[num]-a[1]+1 != num)
        for (int j=a[1];j<=a[num];j++)
        if (!f[j])
         for (int i=1;i<=num;i++)
          if (!map[a[i]][j]) {add(a[i],j); ind[j]++; map[a[i]][j]=1;}
    }
    //queue<int>q;
    for (int i=1;i<=n;i++)
     if (!ind[i]) pushq(i);
    while (head<=tail)
    {
        int p=q[head]; popq(); int k=st[p];
        while (to[k]!=0)
        {
            ind[to[k]]--;
            if (!ind[to[k]]) {pushq(to[k]); ans[to[k]]=ans[p]+1;}              ///算有幾個走到這裡的層數        就是to[k]點外面的一層
            k=next[k];
        }
    }  
    for (int i=1;i<=n;i++) maxn=max(maxn,ans[i]);
    printf("%d\n",maxn+1);
return 0;   
}



相關推薦

P1983 車站分級 解題報告

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

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 車站分級(搜尋_圖論)

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

P2158 [SDOI2008]儀仗隊 解題報告

分解 AR AC 判斷 種類 std 求和 輸入輸出 解題報告 P2158 [SDOI2008]儀仗隊 題目描述 作為體育委員,C君負責這次運動會儀仗隊的訓練。儀仗隊是由學生組成的N * N的方陣,為了保證隊伍在行進中整齊劃一,C君會跟在儀仗隊的左後方,根據其視線所及的學生

P1381 單詞背誦 解題報告

一段 math string i+1 HA mem 找到 嘗試 還要 P1381 單詞背誦 題目描述 靈夢有\(n\)個單詞想要背,但她想通過一篇文章中的一段來記住這些單詞。 文章由\(m\)個單詞構成,她想在文章中找出連續的一段,其中包含最多的她想要背的單詞(重復的只算一

P2679 子串 解題報告

span 出現 但是 math 題目 HA 現在 ons clas P2679 子串 題目描述 有兩個僅包含小寫英文字母的字符串\(A\)和\(B\)。 現在要從字符串\(A\)中取出\(k\)個互不重疊的非空子串,然後把這\(k\)個子串按照其在字符串\(A\)中出現的順

P2596 [ZJOI2006]書架 解題報告

ID 維護 get 個數 hang 交換 構造 play query P2596 [ZJOI2006]書架 題目描述 小T有一個很大的書櫃。這個書櫃的構造有些獨特,即書櫃裏的書是從上至下堆放成一列。她用1到n的正整數給每本書都編了號。 小T在看書的時候,每次取出一本書,看完

P3313 [SDOI2014]旅行 解題報告

HA 發生 間隔 如果 節省空間 query tro oid 問題 P3313 [SDOI2014]旅行 題目描述 S國有N個城市,編號從1到N。城市間用N-1條雙向道路連接,滿足從一個城市出發可以到達其它所有城市。每個城市信仰不同的宗教,如飛天面條神教、隱形獨角獸教、絕地

P1070 道路遊戲 解題報告

消費機 完美 隊列優化 分享圖片 line std http 不出 ++ P1070 道路遊戲 題目描述 小新正在玩一個簡單的電腦遊戲。 遊戲中有一條環形馬路,馬路上有\(n\)個機器人工廠,兩個相鄰機器人工廠之間由一小段馬路連接。小新以某個機器人工廠為起點,按順時針順序依

P3197 [HNOI2008]越獄 解題報告

hnoi tdi -h 快速冪 我們 noi2008 () 復雜 turn P3197 [HNOI2008]越獄 題目描述 監獄有連續編號為\(1…N\)的\(N\)個房間,每個房間關押一個犯人,有\(M\)種宗教,每個犯人可能信仰其中一種。如果相鄰房間的犯人的宗教相同,就

P3942 將軍令 解題報告

一支 一行 完全 關於 超過 i++ 特殊性 include ext P3942 將軍令 題目描述 又想起了四月。 如果不是省選,大家大概不會這麽輕易地分道揚鑣吧? 只見一個又一個昔日的隊友離開了機房。 憑君莫話封侯事,一將功成萬骨枯。 夢裏,小\(F\)成了一個給將軍送密

P1091 合唱隊形 解題報告

hit 區間 thml https 總數 -html 輸出格式 XSA href 題目描述 NN 位同學站成一排,音樂老師要請其中的( N-KN?K )位同學出列,使得剩下的 KK 位同學排成合唱隊形。 合唱隊形是指這樣的一種隊形:設K位同學從左到右依次編號為 1,2,…,

P1363 幻想迷宮 解題報告

clu 上下左右 不想 單元 work 報告 一個點 lse sca P1363 幻想迷宮 題目描述 背景 Background (喵星人LHX和WD同心協力擊退了汪星人的入侵,不幸的是,汪星人撤退之前給它們制造了一片幻象迷宮。) WD:嗚嗚,腫麽辦啊…… LHX:momo

P2258 子矩陣 解題報告

scan 復雜度 size 搜索 不難 mem 中一 表示 上下 P2258 子矩陣 題目描述 給出如下定義: 子矩陣:從一個矩陣當中選取某些行和某些列交叉位置所組成的新矩陣(保持行與列的相對順序)被稱為原矩陣的一個子矩陣。 例如,下面左圖中選取第 2 、 4行和第 2 、

P1311 選擇客棧 解題報告

pac esp cos ron i++ 選擇 for amp 格式 P1311 選擇客棧 題目描述 麗江河邊有 \(n\) 家很有特色的客棧,客棧按照其位置順序從 \(1\) 到 \(n\) 編號。每家客棧都按照某一種色調進行裝飾(總共 \(k\) 種,用整數 \(0\)

P1966 火柴排隊 解題報告

efi 不容易 con scan can void 逆序對 return gin P1966 火柴排隊 題目描述 涵涵有兩盒火柴,每盒裝有 \(n\) 根火柴,每根火柴都有一個高度。 現在將每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 兩列火柴之間的距離定義為:

P2444 [POI2000]病毒 解題報告

一個 超過 flag ring 這樣的 sed out 匹配 const P2444 [POI2000]病毒 題目描述 二進制病毒審查委員會最近發現了如下的規律:某些確定的二進制串是病毒的代碼。如果某段代碼中不存在任何一段病毒代碼,那麽我們就稱這段代碼是安全的。現在委員會已