水题堆3.G - 整数解

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,m,i,k,a,b;
    while(~scanf("%d%d",&n,&m)){
        if(n==0&&m==0)break;
        int flag=0;
        if(m<0)k=-1*m;
        else k=m;
        for(i=1;i<=k;i++){
            if(m%i==0){
                a=i+m/i;
                b=-1*a;
                if(a==n||b==n){
                    flag=1;
                    break;
                }
            }
        }
        if(flag==1)printf("Yes\n");
        else printf("No\n");
    }
    return 0;
}

找能整除m的数,然后把这个数和商加起来看能否等于n

#include<bits/stdc++.h> using namespace std; const int N=1e4+5; struct node { int to,w; vector<int> way; bool operator <(const node& a)const { return w>a.w; } } e,p; priority_queue<node> q; vector<node> g[N]; vector<int> val(N,INT_MAX); int n,m,k,s,t,u,v,w; bool fl[N]; void dij() {//获取最优路径,从最优路径上减去最大权值边 e.to=s; q.push(e); val[s]=0; while(!q.empty()) { e=q.top(); q.pop(); if(e.to==t) { sort(e.way.begin(),e.way.end()); while(!e.way.empty()&&k) { e.w-=e.way.back(); e.way.pop_back(); k--; } cout<<e.w; return; } if(fl[e.to])continue; fl[e.to]=true; for(node &x:g[e.to]) { if(e.w+x.w<val[x.to]) { p=e; p.to=x.to; p.w+=x.w; p.way.emplace_back(x.w); val[x.to]=e.w+x.w; q.push(p); } } } } int main() { ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n>>m>>k>>s>>t; while(m--) { cin>>u>>v>>w; g[u].push_back({v,w}); g[v].push_back({u,w}); } dij(); return 0; }# P4568 [JLOI2011] 飞行路线 ## 目描述 Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 $n$ 个城市设有业务,设这些城市分别标记为 $0$ 到 $n-1$,一共有 $m$ 种航线,每种航线连接两个城市,并且航线有一定的价格。 Alice 和 Bob 现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。航空公司对他们这次旅行也推出优惠,他们可以免费在最多 $k$ 种航线上搭乘飞机。那么 Alice 和 Bob 这次出行最少花费多少? ## 输入格式 第一行三个整数 $n,m,k$,分别表示城市数,航线数和免费乘坐次数。 接下来一行两个整数 $s,t$,分别表示他们出行的起点城市编号和终点城市编号。 接下来 $m$ 行,每行三个整数 $a,b,c$,表示存在一种航线,能从城市 $a$ 到达城市 $b$,或从城市 $b$ 到达城市 $a$,价格为 $c$。 ## 输出格式 输出一行一个整数,为最少花费。 ## 输入输出样例 #1 ### 输入 #1 ``` 5 6 1 0 4 0 1 5 1 2 5 2 3 5 3 4 5 2 3 3 0 2 100 ``` ### 输出 #1 ``` 8 ``` ## 说明/提示 #### 数据规模与约定 对于 $30\%$ 的数据,$2 \le n \le 50$,$1 \le m \le 300$,$k=0$。 对于 $50\%$ 的数据,$2 \le n \le 600$,$1 \le m \le 6\times10^3$,$0 \le k \le 1$。 对于 $100\%$ 的数据,$2 \le n \le 10^4$,$1 \le m \le 5\times 10^4$,$0 \le k \le 10$,$0\le s,t,a,b < n$,$a\ne b$,$0\le c\le 10^3$。 另外存在一组 hack 数据。 这道里我通过记录最大权值边来减去,以此得到结果,但问是减去back的代码没有执行,样例结果得到13,我需要你分析原因
最新发布
07-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值