結果
| 問題 |
No.3013 ハチマキ買い星人
|
| ユーザー |
yimiya(いみや)
|
| 提出日時 | 2025-01-25 14:56:32 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 3,465 bytes |
| コンパイル時間 | 3,866 ms |
| コンパイル使用メモリ | 181,432 KB |
| 実行使用メモリ | 1,636,480 KB |
| 最終ジャッジ日時 | 2025-01-25 23:36:41 |
| 合計ジャッジ時間 | 81,169 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 2 WA * 8 TLE * 15 MLE * 20 |
ソースコード
#include <bits/stdc++.h>
#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <algorithm>
#include <iomanip>
#define rep(i,n) for (ll i = 0;i < (ll)(n);i++)
#define Yes cout << "Yes" << endl// YESの短縮
#define No cout << "No" << endl// NOの短縮
#define rtr0 return(0)//return(0)の短縮
#define gyakugen(x) modpow(x,mod - 2,mod);
#define anothergyakugen(x) modpow(x,anothermod - 2,anothermod);
using namespace std;
using ll = long long;//63bit型整数型
using ld = long double;//doubleよりも長い値を保存できるもの
using ull = unsigned long long;//符号がない64bit型整数
ll mod = 998244353;
ll anothermod = 1000000007;
ll MINF = -5000000000000000000;
ll INF = 5000000000000000000;
ll BAD = -1;
vector<ll>tate = {0,-1,0,1};//グリッド上の全探索時の四方向の上下のチェック
vector<ll>yoko = {1,0,-1,0};//グリッド上の全探索時の四方向の右左のチェック
vector<ll>eightx = {0,-1,-1,-1,0,1,1,1};//グリッド上の全探索時の八方向の上下のチェック
vector<ll>eighty = {1,1,0,-1,-1,-1,0,1};//グリッド上の全探索時の八方向の右左のチェック
vector<ll>hexsax = {0,1,1,0,-1,-1};
vector<ll>hexsay = {1,1,0,-1,-1,0};
//返り値は素数のリスト。
vector < bool > isprime;
vector < ll > Era(int n){//書き方 vector<ll>[] = Era(x); とやるとxまでの素数が出てくる。
isprime.resize(n, true);
vector < ll > res;
isprime[0] = false;
isprime[1] = false;
for(ll i = 2; i < n; ++i) isprime[i] = true;
for(ll i = 2; i < n; ++i) {
if(isprime[i]) {
res.push_back(i);
for(ll j = i * 2; j < n; j += i) isprime[j] = false;
}
}
return res;
}
// 素数判定 21~35
long long modpow(long long a, long long n, long long mod) {
long long res = 1;
while (n > 0) {
if (n & 1) res = res * a % mod;
a = a * a % mod;
n >>= 1;
}
return res;
}
// モッドを使った累乗
/*ll ans = INF;
ll N,M,K;
vector<vector<pair<ll,ll>>>graph;
void DFS(set<ll>&next,set<ll>&past,ll &cost){
if(past.size() == N){
ans = min(ans,cost%K);
return;
}
if(next.empty() == true)return;
ll a = *next.begin();
next.erase(a);
for(ll i = 0;i<graph[a].size();i++){
ll b = graph[a][i].first;
ll c = graph[a][i].second;
if(!past.count(b)){
next.insert(b);
past.insert(a);
ll COST = (cost + c) % K;
DFS(next,past,COST);
next.erase(b);
past.erase(a);
}
}
DFS(next,past,cost);
}*/
ll ans = 0;
map<ll,ll>shop;
vector<vector<pair<ll,ll>>>graph;
void DFS(ll place,vector<bool>&visited,ll money,ll hatimaki){
//visited[place] = true;
if(money <= 0)return;
ans = max(ans,hatimaki);
for(ll i = 0;i<graph[place].size();i++){
ll a = graph[place][i].first;
ll b = graph[place][i].second;
visited[a] = true;
if(shop[place] != 0){
ll x = money / shop[place];
DFS(a,visited,money - (x*shop[place]) - b,x + hatimaki);
}
DFS(a,visited,money - b,hatimaki);
visited[a] = false;
}
}
int main(){
//B以上は基本詳細を書いておくと便利 A = ooの値とか 見直す時に便利
// この問題の本質
ll N,M,P,Y;
cin >> N >> M >> P >> Y;
graph = vector<vector<pair<ll,ll>>>(N,vector<pair<ll,ll>>(0));
vector<bool>visited(N);
for(ll i = 0;i<M;i++){
ll a,b,c;
cin >> a >> b >> c;
a--;
b--;
graph[a].push_back({b,c});
graph[b].push_back({a,c});
}
for(ll i = 0;i<P;i++){
ll a,b;
cin >> a >> b;
a--;
shop[a] = b;
}
DFS(0,visited,Y,0);
cout << ans << endl;
}
yimiya(いみや)