关键还是列出不等式,但是这个题对于未知数二分了一下可真是太sao了。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
const int maxn1=30;
const int maxn2=1000;
int head[maxn1],ans=1,dis[maxn1],vis[maxn1],cnt[maxn1];
int n,need[maxn1];
struct edge{
int to,v,next;
}e[maxn2];
void add(edge e[],int &ans,int head[],int x,int y,int v){
e[ans].to=y; e[ans].next=head[x]; e[ans].v=v;
head[x]=ans++;
}
void init(){
memset(head,0,sizeof(head));
memset(cnt,0,sizeof(cnt));
ans=1;
}
int spfa(int S,int T){//最长路
for(int i=0;i<=24;i++) dis[i]=-inf,vis[i]=0,cnt[i]=0;
dis[S]=0; vis[S]=1;
cnt[S]=1;
queue<int> q;
q.push(S);
while(!q.empty()){
int x=q.front();
q.pop();
vis[x]=0;
for(int i=head[x];i;i=e[i].next){
int y=e[i].to;
if(dis[y]<dis[x]+e[i].v){
dis[y]=dis[x]+e[i].v;
if(!vis[y]