SDUACM暑期集訓周賽(二)
POJ 3613 Cow Relays
[Problem]
給定m(<=100)條邊的無向圖,詢問從s點到t點經過k條邊的最短路徑。 k (1e6)
[Solution]
我們定義一種操作(類似於矩陣乘)
c[i][j] = min(a[i][k] + b[k][j]) (1 <=k<=n )
容易證明此操作滿足結合律
令該圖的矩陣為a,則答案為a^k
[Code]
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
typedef long long ll;
#define maxn 200
#define inf 0x3f3f3f3f3f3f3f3f
int n, m, cnt, s, t, tim;
map<int , int > conn;
int id(int x)
{
if (!conn.count(x)) conn[x] = ++cnt;
return conn[x];
}
struct matrix {
ll m[maxn][maxn];
matrix(){
memset (m, inf, sizeof(m));
}
};
matrix mul(matrix a, matrix b)
{
matrix c;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
c.m[i][j] = inf;
for(int k = 1; k <= n; k++)
c.m[i][j] = min(c.m[i][j], a.m[i][k] + b.m[k][j]);
}
}
return c;
}
matrix quickpow(matrix a, int b)
{
matrix tot = a;
b--;
while(b > 0){
if (b % 2 == 1) tot = mul(tot, a);
a = mul(a, a);
b /= 2;
}
return tot;
}
int main()
{
// freopen("b.in", "r", stdin);
scanf("%d%d%d%d", &tim, &m, &s, &t);
cnt = 0;
matrix base;
for(int i = 1; i <= m; i++){
int x, y, z;
scanf("%d%d%d", &z, &x, &y);
x = id(x); y = id(y);
base.m[x][y] = z;
base.m[y][x] = z;
}
n = cnt;
s = id(s); t = id(t);
ll ans = quickpow(base, tim).m[s][t];
cout << ans;
return 0;
}
POJ 3190 Stall Reservations
[Solution]
首先把每頭牛的區間排序,按照升序依次為每頭牛分配stall
把每個stall的結束時間放到一個優先佇列,每次取出結束時間最靠前的機器,判斷這個stall是否可以為這頭牛服務,否的話加入一個新的stall
[Code]
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
#define N 220000
int n, m;
struct node{
int pos, l, r;
bool operator <(const node &a) const {
if (r == a.r) return l > a.l;
return r > a.r;
}
} a[N];
int ans[N];
priority_queue<node> q;
bool cmp(node a, node b)
{
if (a.l == b.l) return a.r < b.r;
return a.l < b.l;
}
int main()
{
//freopen("b.in", "r", stdin);
while(~scanf("%d", &n)){
int cnt = 0;
while(!q.empty()) q.pop();
for(int i = 1; i <= n; i++) scanf("%d%d", &a[i].l, &a[i].r);
for(int i = 1; i <= n; i++) a[i].pos = i;
sort(a + 1, a + n + 1, cmp);
for(int i = 1; i <= n; i++) {
int l = a[i].l, r = a[i].r, pos = a[i].pos;
if (q.empty() || q.top().r >= l){
node res;
res.pos = ++cnt;
res.l = l;
res.r = r;
ans[pos] = cnt;
q.push(res);
}
else {
node res = q.top();
q.pop();
res.l = l;
res.r = r;
ans[pos] = res.pos;
q.push(res);
}
}
printf("%d\n", cnt);
for(int i = 1; i <= n; i++) printf("%d\n", ans[i]);
}
return 0;
}
相關推薦
SDUACM暑期集訓周賽(二)
POJ 3613 Cow Relays [Problem] 給定m(<=100)條邊的無向圖,詢問從s點到t點經過k條邊的最短路徑。 k (1e6) [Solution] 我們定義一種操作(類似於矩陣乘) c[i][j] = min(a[i][k
【20180311】2018北京集訓測試賽(二)
char 開始 n) source 數組 區間 但是 多次 pan Problem A: 遊戲 題解&反思 模型轉化挺簡單的,但是轉化成“查詢區間內是否有若幹個數組成的集合xor和為0”問題的時候,突然發現不會做……最後只打了20暴力真是涼涼。 其實線性基這個東
2016集訓測試賽(二十五)小結
時間 第一題 是我 很多 分析 題目 ... 人的 簡單 這場測試賽有必要小結一下. 昨晚 1 點才睡, 今天狀態很差, 先睡了 1 個小時, 然後開始打比賽. 第一題不大會做, 寫了一個代碼後發現是錯的, 第二題看不懂題, 第三題簡單地分析了一下, 發現是一個樹形
java-類生命周期(二)
.net ava 初始化 啟動 pri pos 入口 原理 tails 上文介紹了java-類生命周期(一),理論性比較強。認為太復雜的同學,瞟一下本文的樣例加深理解。 先給道題目,看看答對沒。 /** * 類載入試驗基類 * * @author peter
Python第一周習題集(二)
浮點數 由於 開發 出了 total Go 變量 比較大小 九九 #比較大小 #方法1 from math import max a = (‘請輸入第一個整數:‘) b = (‘請輸入第二個整數:‘) c = (‘請輸入第三個整數:‘) d = max(a, b, c)
【20180318】2018北京集訓測試賽(六)
sum cnblogs 中間 com phi gpo 但是 分享圖片 problem 菜雞滾回石家莊了233 Problem B: 求和 題解&反思: 好久沒寫反演了真刺激 大力推公式就好咯 \[ \sum_{i=1}^{n}\sum_{j=1}^{i}\sum_
[2016北京集訓測試賽(五)]打地鼠-[思考題]
pri scrip name bsp 判斷 只需要 分享圖片 live src Description Solution 我們先只考慮一只地鼠的情況,依題意得,在某一個時刻該地鼠的可能停留位置是一個公差為2的等差數列。我們設這個等差數列的兩端為[L,R]。則如果區間[L+
Contest1030 - 2017級新生周賽(三)F
1326 Problem F 題目描述 你指尖躍動的電光,是我此生不變的信仰,唯我超電磁炮永世長存!(好羞恥= =) 黑子今天又跑去姐姐大人的寢室玩了,今天黑子和姐姐大人玩取硬幣,有一堆硬幣共n枚,炮姐和黑子兩個人輪流拿,炮姐先拿,每次最少拿1枚,最多拿k枚,拿到最後一
Contest1030 - 2017級新生周賽(三)E
1325 Problem E 題目描述 啊啊啊,又是喜聞樂見的英靈召喚環節了,只不過這次的英靈召喚有些許的不一樣,這次我們不再是通過聖遺物召喚了,而是通過一些蘊含著魔力的寶石來召喚英靈,現在在地上擺著n個魔法寶石,這些寶石被排在一個等分的圓上,所以他們形成了一個正n多邊形(
Contest1030 - 2017級新生周賽(三)D
1323 Problem D 題目描述 “與我簽訂契約,成為魔法少女吧!”。QB這個無恥老賊又在世界各地搞傳銷了。 某一天我們的圓神終於決定要把QB封印起來了,可是普通的魔法對QB來說是沒有用的。於是圓神來到學院都市,找到了呱太醫生,呱太醫生通過研究,發現QB的構造與人工智
Contest1030 - 2017級新生周賽(三)C
1324 Problem C 題目描述 胡蘿蔔辣?胡蘿蔔辣?胡蘿蔔辣不辣? 我是UMR的朋友,希爾芬,跌斯哇。 聽UMR說好多同學還沒有學字串,跌斯哇。 可是後面的題要用到一點點的字串讀取知識,跌斯哇。 怎麼辦呢,跌斯哇。 就讓我來教教大家吧,跌斯哇。 這裡我會帶大家
Contest1030 - 2017級新生周賽(三)B
1322 Problem B 題目描述 大家都知道《崩壞3》是一款非常休閒的手遊(笑),在大偉哥的精巧設計下,《崩壞3》憑藉其精美的畫面吸引了許多玩家,現在Stone作為一個剛入門的艦長,十分想要八重櫻這個角色,可是無奈Stone沒有錢氪補給卡,所以Stone只好選擇爆肝收
Contest1030 - 2017級新生周賽(三)A
1328 Problem A 題目描述 在實力至上主義的教室中,點數永遠是不變的話題,只有有了足夠的點數,才有可能從D班,晉升至A班。當然對點數影響比較大就是平時的測驗了,現在有一道很關鍵的測驗問題: 給你一個三角形,三個頂點分別是a, b, c, 再給出一個數n和三條邊長,
2017級新生周賽(三)C
1324 Problem C 題目描述 胡蘿蔔辣?胡蘿蔔辣?胡蘿蔔辣不辣? 我是UMR的朋友,希爾芬,跌斯哇。 聽UMR說好多同學還沒有學字串,跌斯哇。 可是後面的題要用到一點點的字串讀取知識,跌斯哇。 怎麼辦呢,跌斯哇。 就讓我來教教大家吧,跌斯哇。 這裡我會
2017級新生周賽(三)F
1326 Problem F 題目描述 你指尖躍動的電光,是我此生不變的信仰,唯我超電磁炮永世長存!(好羞恥= =) 黑子今天又跑去姐姐大人的寢室玩了,今天黑子和姐姐大人玩取硬幣,有一堆硬幣共n枚,炮姐和黑子兩個人輪流拿,炮姐先拿,每次最少拿1枚,最多拿k枚,拿到
2017級新生周賽(三)E
1325 Problem E 題目描述 啊啊啊,又是喜聞樂見的英靈召喚環節了,只不過這次的英靈召喚有些許的不一樣,這次我們不再是通過聖遺物召喚了,而是通過一些蘊含著魔力的寶石來召喚英靈,現在在地上擺著n個魔法寶石,這些寶石被排在一個等分的圓上,所以他們形成了一個正n
計蒜客 2017 NOIP 提高組模擬賽(二)Day1 A. 鄰家男孩
一道非常水的博弈論題目。 觀察樣例給出的最優方案,就是凡打出牌的時候鄰家男孩不出牌,直到凡打出最後一張牌的時候鄰家男孩開始出牌,這樣對兩者的方案都是最優的。所以可以得到 n=(a-1)-(b+1)
[DP] 計蒜客 2017 NOIP模擬賽(二)Day2 T2.紫色百合
不難發現,一個集合S的權值即等於 ∏x∈S(x+1) 所以題目轉化成 1,2,3,...,n 個數中取若干個數加和為 P 的方案數。 這個可以 O(nn−−√) 的 DP,比較經典: f[i][j
計蒜客 2017 NOIP 提高組模擬賽(二)Day2
T1:劫富濟貧 這題一開始hash做的,超時 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #include<map&g
數據結構-第10周作業(二叉樹的創建和遍歷算法)
樹的創建 創建 -1 數據結構 二叉 分享 com jpg 遍歷算法 數據結構-第10周作業(二叉樹的創建和遍歷算法)