題意:給出一些約束條件,要求得出字典序最小的符合所有條件的方案。
這道題很顯然是乙個在$aoe$上的程式流程問題,顯然是乙個拓撲排序。但是這個拓撲排序有點意思,因為它要求字典序最小。
那麼我們就要找出一種方法,使得最小的出現在最前面,那麼我們就考慮用堆維護,倒序建邊。
如果我們正序建邊,很有可能我們選取了乙個點之後再向下走發現了乙個更小的點,而且這個更小的點還是可以放在前面的。而如果倒序建邊,小的就一定會後出現,出現時大的已經出現過。那麼我們就用棧來表示,可以確定這一方案是最優的。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8cogs1958using
namespace
std;
9const
int maxn=100005
;10 template
11void clear(t &x)
1215
struct
node
16edge[maxn];
19int
head[maxn],tot;
20void addedge(int u,int
v)21
;head[u]=tot;23}
24 priority_queueq;
25 stacks;
26int
n,m;
27int
entrance_degree[maxn];
28int
haha()
2943
int cnt=0;44
for(int i=1;i<=n;i++)
45if(!entrance_degree[i])q.push(i);
46while(!q.empty())
4756}57
if(cnt!=n)puts("
impossible!");
58else
5965 puts(""
);66}67
}68}69
int sb=haha();
70int main()
P3243 HNOI2015 菜餚製作 拓撲排序
知名美食家小 a被邀請至atm 大酒店,為其品評菜餚。atm 酒店為小 a 準備了 n 道菜餚,酒店按照為菜餚預估的質量從高到低給予1到n的順序編號,預估質量最高的菜餚編號為1。由於菜餚之間口味搭配的問題,某些菜餚必須在另一些菜餚之前製作,具體的,一共有 m 條形如 i 號菜餚 必須 先於 j 號菜...
拓撲排序 HNOI2015 菜餚製作
知名美食家小 a被邀請至atm 大酒店,為其品評菜餚。atm 酒店為小 a 準備了 n 道菜餚,酒店按照為菜餚預估的質量從高到低給予1到n的順序編號,預估質量最高的菜餚編號為1。由於菜餚之間口味搭配的問題,某些菜餚必須在另一些菜餚之前製作,具體的,一共有 m 條形如 i 號菜餚 必須 先於 j 號菜...
HNOI2015 菜餚製作 思想 拓撲排序
題意 求乙個拓撲序列,保證以1 n的優先順序,每個數盡量排在前面 分析 顯然求字典序最小的拓撲序有問題,字典序列由每個位置的數字決定,可是這裡有乙個1 n的優先順序,就是說盡量要保證1在前,以此類推。如果說乙個元素,圖中不存在 與它深度相同 的元素的話,那麼它在拓撲序列中的位置一定是固定的,那麼我們...