SRM573 Div1Medium Ski Resorts

【分析】
修改,我比較討厭這個詞。
有沒有什麼貪心的做法?不知道啊。
要改成什麼?
問題好像走進了死衚衕。我們唯一知道的就是這個點原來的特徵值。枚舉一下改成它們?試一試吧!
定義dis[i][j]爲將i的特徵值改成j的特徵值。
接下來直接一遍Dijkstra帶走!!!
其實我也知道這樣說服不了你們。你其實可以模擬一下特徵值爲:10 20 10(i和i+1相連)
它的答案應該是10,無論將10、20改成15、15還是將將10、20改成16、16,答案都不會變,那我們何不妨將特徵值改成我們已知的。
我知道這還是說服不了你們……
這TM其實就是玄學!你要揣摩出題者的意圖!一定這樣的沒錯!

【代碼】

#include <bits/stdc++.h>
#define ll long long
#define oo 1e15
#define M 55
using namespace std;
ll dis[M][M],ans=oo;
vector<int>st[M];
char str[M][M];
bool mk[M][M];
int n,m,w[M];
struct node{
    int pre,now;
    ll co;
    bool operator<(const node &a)const{
        return co>a.co;
    }
};
priority_queue<node>q;
void Dij(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)dis[i][j]=oo;
    }
    while(!q.empty())q.pop();
    for(int i=1;i<=n;i++){
        node tmp;
        tmp.pre=1;
        tmp.now=i;
        tmp.co=dis[1][i]=abs(w[i]-w[1]);
        q.push(tmp);
    }
    while(!q.empty()){
        node tmp=q.top();
        q.pop();
        int pre=tmp.pre;
        int now=tmp.now;
        ll co=tmp.co;
        if(mk[pre][now])continue;
        mk[pre][now]=1;
        for(int i=0;i<st[pre].size();i++){
            int nxp=st[pre][i];
            for(int j=1;j<=n;j++){
                int nxn=j;
                if(mk[nxp][nxn])continue;
                if(w[now]>=w[nxn]){
                    ll v=abs(w[nxn]-w[nxp]);
                    if(dis[nxp][nxn]>co+v){
                        tmp.pre=nxp;
                        tmp.now=nxn;
                        tmp.co=dis[nxp][nxn]=co+v;
                        q.push(tmp);
                    }
                }
            }
        }
    }
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%s",str[i]+1);
        for(int j=1;j<=n;j++){
            if(str[i][j]=='Y')st[i].push_back(j);
        }
    }
    for(int i=1;i<=n;i++)scanf("%d",&w[i]);
    Dij();
    for(int i=1;i<=n;i++)ans=min(ans,dis[n][i]);
    if(ans==oo)puts("-1");
    else cout<<ans<<endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章