現在有乙個n個點的有向圖,每個點僅有一條出邊
你需要求出圖中最長的簡單路徑包含點的數量(1≤n≤1,000,000)
輸入描述:
第一行乙個數字n
接下來n行,每行乙個正整數,第i+1行的數字表示第i個點出邊終點的編號
(點從1開始標號)
輸出描述:
一行乙個數字,最長的簡單路徑的長度
這道題就是先拓撲排序求出各個點的(其實就是支鏈)最長長度,然後拓撲沒有遍歷到的點也就是環上的點,找出這些點在遍歷一遍,找出環上的點能連線的最長長度和環的大小,
為啥要遍歷所有沒有遍歷的點,因為這題的圖可以是不連通的,也就是說可以有多個環;
**:
#include
#define ll long long
#define pa pair
#define lson k<<1
#define rson k<<1|1
#define inf 0x3f3f3f3f
//ios::sync_with_stdio(false);
using
namespace std;
const
int n=
1000100
;const
int m=
1000100
;const ll mod=
998244353
;int in[n]
;int n;
struct nodeedge[n*2]
;int head[n]
;int cnt;
void
add(
int p,
int q)
int dp[n]
;queue<
int>qu;
bool vis[n]
;void
bfs()}
}int sum,mmax;
bool f[n]
;void
dfs(
int p)
}int
main()
for(
int i=
1;i<=n;i++
)bfs()
;int ans=0;
for(
int i=
1;i<=n;i++)}
cout
}
2020牛客寒假演算法基礎集訓營
長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...
2020牛客寒假演算法基礎集訓營1
找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...
2020牛客寒假演算法基礎集訓營1
h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...