北郵oj 468 小妹妹送快遞

2021-10-04 17:16:57 字數 1549 閱讀 2498

寫了兩種方法:dijkstra和kruskal

求最短路徑的變體,改一下鬆弛條件即可。

最坑的是當c=0時,輸出為1.

時間限制 1000 ms 記憶體限制 65536 kb

題目描述

mays王國的女王大人每天過著自由自在的生活,她最大的樂趣就是給鄰國的帥氣王子寫信。但是最近,mays王國的叔叔們變得很無聊,他們知道女王大人每次都把信委託給皇家小妹妹快遞公司的小妹妹們,於是叔叔們給每一條路都設立了路障,只有小妹妹們給他們表演節目才會讓小妹妹們過去。

在每乙個路障,都有不同數量的叔叔,只有表演的小妹妹的數量不少與叔叔的數量的時候叔叔才會放她們過去。

為了節省開銷,小妹妹快遞公司希望派最少的小妹妹把女王大人的信件送到。請你告訴他們需要派幾個小妹妹。

輸入格式

輸入第一行為資料組數t(t<=10),接下來t組資料,每組第一行為n,m,,2<=n<=10000,1<=m<=100000,表示mays王國的道路由n個節點組成,接下來m行,每行一組u,v,c表示連線節點u,v的一條無向道路,且路障上有c個叔叔,1<=u,v<=n,0<=c<=100。女王大人和皇家小妹妹快遞公司都在節點1,帥氣的鄰國王子住在節點n。

輸出格式

每組資料輸出乙個數字,表示小妹妹快遞公司最少需要派出的小妹妹數量。如果無論派出多少小妹妹都無法把信送到帥氣的鄰國王子手裡,輸出"shimatta!"。

輸入樣例

13 3

1 2 1

2 3 1

1 3 3

輸出樣例

1

#include using namespace std;

const int inf=int_max/10;

const int maxn=10005;

struct edge};

struct point

bool operator < (const point& c)const };

vectorgraph[maxn];

int dis[maxn];

void dijkstra(int n)

}return ;}

int kruskal(long long m,int n)

}else return answer;

}if(find(1)==find(n)) return answer;

else return inf;

//敲響警鐘!!!

//注意啊!!!最後一次剛好合成的邊界沒有考慮到!很多次題目都是這樣了!畢竟不好用flag判斷了

//再三強調!以後判斷出迴圈,一定要注意最後乙個元素的情況!尤其是for中巢狀if的!}

int main()

int answer=kruskal(m,n);

if(answer==inf) printf("shimatta!\n");

else if(answer==0) printf("1\n");

else printf("%d\n",answer);

}return 0;

}

北郵OJ打牌

牌只有1到9,手裡拿著已經排好序的牌a,對方出牌b,用程式判斷手中牌是否能夠壓過對方出牌。規則 出牌牌型有5種 1 一張 如4 則5.9可壓過 2 兩張 如44 則55,66,77,99可壓過 3 三張 如444 規則如 2 4 四張 如4444 規則如 2 5 五張 牌型只有12345 23456...

北郵OJ虛數

乙個複數 x iy 集合,兩種操作作用在該集合上 1 pop 表示讀出集合中複數模值最大的那個複數,如集合為空 輸出 empty 不為空就輸出最大的那個複數並且從集合中刪除那個複數,再輸出集合的大小size 2 insert a ib 指令 a,b表示實部和虛部 將a ib加入到集合中 輸出集合的大...

北郵OJ樹查詢

有一棵樹,輸出某一深度的所有節點,有則輸出這些節點,無則輸出empty。該樹是完全二叉樹。輸入描述 輸入有多組資料。每組輸入乙個n 1 n 1000 然後將樹中的這n個節點依次輸入,再輸入乙個d代表深度。輸出描述 輸出該樹中第d層得所有節點,節點間用空格隔開,最後乙個節點後沒有空格。示例1輸入 41...