NC17511 公交路線

2022-06-15 23:09:30 字數 1207 閱讀 6055

坑點:是m條邊 不是n條邊

思路:\[ 單源最短路\left\

1&.如果有負權值邊但是不構成負權值迴路則選spfa\\

2&.全是正權值則選dijkstra 平均複雜度o(nlog_n)\\

3&.次外選spfa 平均複雜度o(km) k為平均可能進入佇列的點數,最差為o(nm)即所有點都會進入佇列,退化為bellman-ford演算法

\end

\right.\]

其他區別:

dijkstra中v陣列代表的是 0表示當前點並沒有確定為最小點, 當最小根堆 堆頂時則確定為最小點,確定了到當前點的最小權值,則賦值為1;

spfa中v陣列代表的是是否在當前佇列中,佇列中為已經更新的點,0代表當前在,1代表當前不在,通過更新改變過的點來得到單源最短路。

本題:nm<1e8 dijkstra 和spfa都可

spfa:

#includeusing namespace std;

int n,m,s,t;

int tot=0;

struct nodeedge[(int)2e4+5];

int head[(int)1e3+5];

void addedge(int x,int y ,int z)

int dis[(int)1e4+5];

queueq;

int vis[(int)1e4+5];//是否在佇列中

int spfa()}}

if(dis[t]>=0x3f3f3f3f)return -1;

else return dis[t];

}int main ()

cout#includeusing namespace std;

int n,m,s,t;

const int sizen=(int)2e4+5;

struct nodeedge[sizen];

int head[sizen];

int tot=0;

void add(int x,int y,int z)

int d[sizen],v[sizen];

priority_queue>q;

int dij()}}

if(v[t])return d[t];

return -1;

}int main ()

cout

}

1751 分解因數

總時間限制 1000ms 記憶體限制 65536kb 描述 給出乙個正整數a,要求分解成若干個正整數的乘積,即a a1 a2 a3 an,並且1 a1 a2 a3 an,問這樣的分解的種數有多少。注意到a a也是一種分解。輸入第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括乙個正...

1751 區間覆蓋問題

time limit 1000 ms memory limit 65536 kib problem description 設x1 x2 xn 是實直線上的n 個點。用固定長度的閉區間覆蓋這n 個點,至少需要多少個這樣的固定長度閉區間?對於給定的實直線上的n個點和閉區間的長度k,設計解此問題的有效演...

lintcode 1751 牛郎織女

又到了七夕節,牛郎織女相約一起去乙個nm大小的迷宮maze裡玩耍。然而沒過多久,他們就倒霉地走散了。現在給定由.s,t組成的矩陣maze,其中.表示空地,表示障礙物,s表示牛郎的位置 t表示織女的位置,牛郎和織女都會試圖尋找對方,不停地在矩陣中走動 他們可以每次向上下左右四個方向移動一格或者站著不動...