1. 程式人生 > >SDUACM暑期集訓周賽(二)

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周作業(二叉樹的創建和遍歷算法)