首页 > 其他分享 >POJ 2249 Remmarguts' Date

POJ 2249 Remmarguts' Date

时间:2022-12-12 13:23:02浏览次数:46  
标签:Remmarguts ed ll u3 st que Date POJ dis

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <string>
using namespace std;
typedef long long ll;
const ll N = 1e5 + 1111;
ll n , m ,  st , ed ;
ll h [ N ] , nt [ N << 1 ] , to [ N << 1 ] , cnt , w [ N << 1 ] ;
void link ( ll x , ll y , ll z )
{
	nt [ ++ cnt ] = h [ x ] ; 
	h [ x ] = cnt ; 
	to [ cnt ] = y ; 
	w [ cnt ] = z ; 
}
ll dis [ N ] ;
namespace dij{

	ll H [ N ] , NT [ N << 1 ] , TO [ N << 1 ] , CNT , W [ N << 1 ] ;
	ll vis [ N ] ; 
	void Link ( ll x , ll y , ll z ) {
		NT [ ++ CNT ] = H [ x ] ; 
		H [ x ] = CNT ;
		TO [ CNT ] = y ; 
		W [ CNT ] = z ;
	}


	void init ( ) { 
		memset ( H , 0 , sizeof ( H ) ) ; 
		memset ( NT , 0 , sizeof ( NT ) ) ; 
		memset ( TO , 0 , sizeof ( TO ) ) ; 
	}

	void dij ( ll st ) {

		for ( ll i = 1 ; i <= n ; i ++ ) 
			dis [ i ] = ( 1 << 30 ) ;
		dis [ st ] = 0 ;

		while ( 1 ) {

			ll minnest = ( 1 << 30 ) , u = -1 ;
			for ( ll i = 1 ; i <= n ; i ++ ) {
				if ( vis [ i ] ) continue;
				if ( minnest > dis [ i ] ) 
					u = i , minnest = dis [ i ] ;
			}
			if ( minnest == ( 1 << 30 ) ) break;
			vis [ u ] = 1 ;

			for ( ll i = H [ u ] ; i ; i = NT [ i ] ) {
				ll v = TO [ i ];
				if ( dis [ v ] > dis [ u ] + W [ i ] ) {
					dis [ v ] = dis [ u ] + W [ i ] ; 
				}
			}
		}
	}
}

ll tot [ N ] ;
priority_queue < pair < ll , pair < ll , ll > > > que;

void BFS ( ll st , ll ed , ll k ) {

	que . push ( make_pair( - dis [ st ] , make_pair( 0 , st ) ) ) ;

	while ( ! que . empty ( ) ) {

		ll u1 = que . top () . first ;
		ll u2 = que . top () . second . first ;
		ll u3 = que . top () . second . second ;

        que . pop ( ) ;
		u1 = - u1 ; 
		tot [ u3 ] ++ ;
		if ( tot [ u3 ] == k && u3 == ed ) {
			printf ( "%d\n" , u2 ) ;
			return ; 
		}

		if ( tot [ u3 ] > k ) continue ;

		for ( ll i = h [ u3 ] ; i ; i = nt [ i ] ) {
			ll v = to [ i ] ;
			que . push ( make_pair ( - ( u2 + w [ i ] + dis [ v ] ) , make_pair( u2 + w [ i ] , v ) ) ) ;
		}
	}
	puts("-1");
}
void links ( ll x , ll y , ll z ) { 
	link ( x , y , z ) ; 
	dij :: Link ( y , x , z ) ; 
}
int main ( ){

	cin >> n >> m ;
	dij :: init ( ) ;
	for ( ll i = 1 ; i <= m ; i ++ ) {
		static ll u , v , w ;
		cin >> u >> v >> w ;
		links ( u , v , w ) ; 
	}
	ll st , ed , k ;
	cin >> st >> ed >> k ;
	dij :: dij ( ed ) ;
	BFS ( st , ed , k + ( st == ed ) ) ;
	return 0 ;
}

标签:Remmarguts,ed,ll,u3,st,que,Date,POJ,dis
From: https://www.cnblogs.com/dadidididi/p/16975787.html

相关文章

  • $forceUpdate和this.$set('userInfo',name,'小红');
    在Vue官方文档中指出,$forceUpdate具有强制刷新的作用。那在vue框架中,如果data中有一个变量:age,修改他,页面会自动更新。但如果data中的变量为数组或对象,我们直接去给某个......
  • Date类、DateFormat类解析
    ......
  • [POJ1734]Sightseeing 观光之旅 题解
    无向图的最小环问题,前置芝士:\(\text{Floyd}\)传送门题目描述给定一张无向图,求图中一个至少包含\(3\)个点的环,环上的节点不重复,并且环上的边的长度之和最小。你需要......
  • Java重点 | DateFormat和SimpleDateFormat类
    DateFormat和SimpleDateFormat类DateFormat类和它的子类SimpleDateFormat,后者是前者的子类,所以它有父类的format和parse方法。java.text.DateFormat:是日期/时间格式化......
  • oracle update from多表更新性能优化一例
    这几天测试java内存数据库,和oracle比较时发下一个updatefrom语句很慢,如下:updatebusiness_newsetfare1_balance_ratio=(selectBALANCE_RATIOf......
  • 日期工具类-操作字符串和Date、LocalDate互转,两个日期的时间差等
    避免重复造轮子,相关方法基于hutool日期时间工具封装并做部分增强。需要先引入如下坐标<dependency><groupId>cn.hutool</groupId>......
  • Python | time和datetime模块详解
    对时间进行处理 python与时间处理相关的模块有两个:time模块和datetime模块(python的内置标准库,不需要去下载)datetime模块,常用类4个(date,time,datetime,timedelta)......
  • 前端开发系列010-基础篇之JavaScript的Date对象
    title:'前端开发系列010-基础篇之JavaScript的Date对象'tags:-javaScript系列categories:[]date:2017-05-1219:27:10本文介绍JavaScript中的内置对象Date,时......
  • 第一百一十一篇:基本引用类型Date
    好家伙,本篇为《JS高级程序设计》第五章的学习笔记 1.基本引用类型引用值(或者对象)是某个特定引用类型的实例,在ECMAScript中,引用类型是把数据和功能组织到一起的结构,(像极......
  • Java重点 | Date类
    Date类java.util.Date:表示日期和时间的类,Date表示特定的瞬间,精确到毫秒。毫秒值的概念与作用毫秒:千分之一秒,1000毫秒=1。秒特定的瞬间:一个时间点,一刹那时间例如......