portkey
單源單匯就是最長路
多源單匯就是反一下最長路
多源多匯就是拓撲排序
#include
using
namespace std;
#define in read()
int in
const
int n=
2e5+5;
int n,m,deg[n]
,f[n]
;vector<
int>g[n]
;void
topo()
}return;}
intmain()
topo()
;for
(int i=
1;i<=n;
++i)
printf
("%d\n"
,f[i]);
return0;
}
portkey
考察最後圖的性質:dag
聯想到拓排
拓排要求dag,如果在排的時候強行整成dag呢
是可以的
於是按有向邊拓排
遇到無向邊將它改造為從這個點出發的有向邊
一通暴搞下來得到的就是dag
題目的
資料保證一開始就有的單向道路中就很優秀
而且保證有解
#include
using
namespace std;
#define in read()
#define int long long
int in
const
int n=
2e5+5;
int n,m1,m2;
int tot,first[n]
,nxt[n]
,aim[n]
,wei[n]
,ori[n]
;int deg[n]
;queue<
int>q;
void
ljb(
int u,
int v,
int w)
signed
main()
for(
int i=
1;i<=n;
++i)if(
!deg[i]
) q.
push
(i);if(
!(tot&1)
)++tot;
for(
int i=
1;i<=m2;
++i)
while
(!q.
empty()
)for
(int e=first[u]
;e;e=nxt[e])if
(wei[e]==1
) wei[e^1]
=2;}
for(
int i=
1;i<=n;
++i)
if(deg[i]
)bool flag=
false
;for
(int i=
1;i<=tot;
++i)
if(wei[i]==1
)printf
("%lld %lld\n"
,ori[i]
,aim[i]
),flag=
true;if
(!flag)
puts
("-1");
return0;
}
這第10個點。。。
invalid answer
不會了交題解
拓撲排序 DP 旅遊計畫
luogu p1137 小明要去乙個國家旅遊。這個國家有 n個城市,編號為1到n,並且有mm條道路連線著,小明準備從其中乙個城市出發,並只往東走到城市i停止。所以他就需要選擇最先到達的城市,並制定一條路線以城市i為終點,使得線路上除了第乙個城市,每個城市都在路線前乙個城市東面,並且滿足這個前提下還希...
D Substring 思維 拓撲排序dp
思路 開始看錯題目是無向圖,莽了一手暴力發現題意理解錯誤。通過拓撲排序後就可以轉移到達每個點的字元的最大次數是多少。o 26n 轉移是每次遍歷到的時候更新。入queue是度數為0 include include include include include include include incl...
Hrbust 1493 交通 拓撲排序 Dp
交通 time limit 1000 ms memory limit 65535 k total submit 47 15 users total accepted 18 12 users rating special judge no description 乙個農場主有一塊草地和一些奶牛,因為在...