POJ 3678(拓撲排序 優先佇列)

2021-09-24 11:26:00 字數 897 閱讀 9345

poj 3678

(1)題意:

給出n個點,每個點都有乙個重量值有兩個限制條件,

一是n個點每個點的重量都不一樣

二是m個限制中有a求的重量小於b球的重量。

而且盡可能讓求的質量小一點,每個從1~n每次盡量讓這個求的質量小一些。

如果結果存在,輸出n個點的質量,否則輸出-1.

(2)思路:

一開始以為是差分約束,後來發現限制條件解出來的解不能保證所有的點的值都不同。

將限制作為邊,y的值一定大於x的值,所以在先給較大的y賦值,然後在處理x

建立一條從y到x的邊。

然後拓撲排序,因為要求從1~n的質量的質量盡可能較小,可以先確立最大的質量為n,然後處理其他點,

就是拓撲排序+優先佇列就好了。

(3)**:

參考文章

#include#include#include#include#includeusing namespace std;

const int maxn = 220;

priority_queue q;

int du[maxn],vis[maxn],mp[maxn][maxn],m,n,dis[maxn],fg;

void topo()

int val = n;

while(!q.empty())

} dis[x] = val--;

} if(val!=0) fg = 1;

}int main(void)

fg = 0;

for(int i=0;i1) printf(" ");

printf("%d",dis[i]);

}printf("\n");

} }return 0;

}

POJ 3678 深刻理解2SAT

感覺 這題看了一晚上了,看了所有的解題報告才明天怎麼回事 昨天自學沒理解好2sat啊,所以連邊不知道怎麼連,而且看了別人的解題報告了也看不明白為什麼要那樣連,暈 思路 因為給出結點 a b,值 c,還有判斷方式op,這種一看當然就知道是用2sat做了。為什麼說是深刻理解2sat呢,因為 2sat中說...

拓撲排序 利用優先佇列

include include include include using namespace std const int maxn 505 vector graph maxn inttopnum maxn nodenum maxn intnumvertex,numedge 有向無環圖一定存在拓撲序...

優先佇列 stl 拓撲排序

time limit 1 sec memory limit 128 mb submit 169 solved 73 submit status web board 馬上要上體育課了,上體育課之前總歸是要排個隊的,ly作為班長,怎麼排隊的問題只能由她來解決,但是馬上要上課了,ly又不清楚所有人的身高,...