P1339 [USACO09OCT]热浪Heat Wave


这道题很明显是一道最短路的题
但是很明显需要优化,
我用spfa加上读入优化,用链表进行储存,
然后就过了。。。。




#include 
   
   
    
     
#define rep(i, x, y) for(int i = x; i <= y; i ++) 
#define rrep(i, x, y) for(int i = y; i >= x; i --) 
#define X first 
#define Y second 
#define pii pair
    
    
     
      
#define mp make_pair 
#define pb push_back 
using namespace std; 
inline int read() 
{ 
    int x = 0, f = 1; char ch = getchar(); 
    while(ch < '0' || ch > '9') {if(ch == '-') f = -1; ch = getchar();} 
    while(ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();} 
    return x * f; 
} 
struct Edge 
{ 
    int next, to, v; 
}e[30010]; 
int dis[3010], ts, te, cnt, head[3010], vis[3010]; 
void ins(int u, int v, int w) 
{ 
    e[++ cnt].next = head[u]; 
    e[cnt].to = v; 
    e[cnt].v = w; 
    head[u] = cnt; 
} 
  
void insert(int u, int v, int w) 
{ 
    ins(u, v, w); 
    ins(v, u, w); 
} 
  
void spfa() 
{ 
    queue
     
     
      
       Q; 
    Q.push(ts); 
    memset(dis, 0x3f, sizeof(dis)); 
    dis[ts] = 0; 
    while(!Q.empty()) 
    { 
        int now = Q.front(); 
        Q.pop(); 
        vis[now] = 0; 
        for(int i = head[now]; i; i = e[i].next) 
        { 
            int y = e[i].to; 
            if(dis[now] + e[i].v < dis[y]) 
            { 
                dis[y] = dis[now] + e[i].v; 
                if(!vis[y]) 
                { 
                    vis[y] = 1; 
                    Q.push(y); 
                } 
            } 
        } 
    } 
} 
  
  
int main() 
{ 
    int n = read(); 
    int k = read(); 
    ts = read(); 
    te = read(); 
    rep(i, 1, k) 
    { 
        int u = read(); 
        int v = read(); 
        int w = read(); 
        insert(u, v, w); 
    } 
    spfa(); 
    cout << dis[te]; 
    return 0; 
}
     
     
    
    
   
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值