首页 > 其他分享 >POJ 3345 Bribing FIPA

POJ 3345 Bribing FIPA

时间:2023-02-20 18:55:57浏览次数:51  
标签:sz ch FIPA int POJ go include Bribing hd

 

 

#include <iostream>
#include <map>
#include <algorithm>
#include <cstring>
using namespace std; 
 const int N =203 ,M =N; 
 typedef long long ll;
 int n,m,fa[N],c[N],sz[N],f[N][N];
 
 std::map<string,ll>p;
string a[N],s[N],cur;
 int nxt[M],go[M],hd[N],all;
 
 void add_(int x,int y){
 	go[++all]=y,nxt[all]=hd[x]; hd[x]=all;
 }
 void dfs(int x){
 	sz[x]=1;
 	f[x][0]=0;
	for(int i=hd[x];i;i=nxt[i]){
 		int y=go[i]; 
 		dfs(y);
 		sz[x]+=sz[y];
 	}
 	for(int i=hd[x];i;i=nxt[i]){
 		int y=go[i]; 
 		
 		for(int j=sz[x];j>=0;j--)
 		 for(int k=0;k<=j;k++)
 		   f[x][j]=min(f[x][j],f[y][k]+f[x][j-k]);
 		  
 	}
 	if(x)
 	for(int i=0;i<=sz[x];i++)
 		f[x][i]=min(f[x][i],c[x]);
 }

 int main()
{
	int i;
    while(std::cin>>n>>m)
    {
        memset(hd,0,sizeof hd);memset(fa,0,sizeof fa);
        all=0;
        memset(f,0x3f,sizeof f);
        p.clear();

        for(ll i=1;i<=n;++i)
        {
            std::cin>>a[i]>>c[i];
            p[a[i]]=i;
            s[i]="";
            char ch=getchar();
            if(ch==' ')ch=getchar();
            while(ch!='\n'&&ch!='\r'){
                s[i].push_back(ch);ch=getchar();
            }
        }
        for(ll i=1;i<=n;++i)
        {
            cur="";
            for(ll j=0;j<s[i].size();++j)
                if(s[i][j]==' ')
                {
                    ll v=p[cur];
                    fa[v]=i;
                    add_(i,v);
                    cur="";
                }
                else cur.push_back(s[i][j]);
            if(cur=="")continue;
            ll v=p[cur];
            fa[v]=i;
            add_(i,v);
        }
        c[0]= 1e9;
        for(ll i=1;i<=n;++i)
            if(!fa[i]) add_(0,i);
            
        dfs(0);
        cout<<f[0][m]<<endl;
    }
    return 0;
}


 
 

 

标签:sz,ch,FIPA,int,POJ,go,include,Bribing,hd
From: https://www.cnblogs.com/towboa/p/17138517.html

相关文章

  • poj 2230
    求一个无向图的欧拉回路,但要求每条边正反过一次 当作有向图,打标记只打一条边 #include<iostream>#include<algorithm>#include<cstring>#include<stack>usi......
  • POJ - 1664 放苹果
    把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1是同一种分法。Input第一行是测试数据的数目t(0<=t<=20)。以下每行均包......
  • 二分查找水题--疯牛(POJ 2456)
    DescriptionFarmerJohnhasbuiltanewlongbarn,withN(2<=N<=100,000)stalls.Thestallsarelocatedalongastraightlineatpositionsx1,...,xN(0<=x......
  • Poj 2503 map sscanf
    Poj2503mapsscanf题意字符串的映射,但它输入的方式很怪。首先每行输入两个单词,中间隔一个空格,到输入空行为止。然后每行输入一个单词,如果能存在映射的单词就输出对......
  • Pseudoprime numbers(POJ-3641 快速幂)
    快速幂:快速幂就是所求的幂次方过大,导致代码所用的时间超限。如:求2^3,3的二进制是11,(n&1)判断次方数的二进制是否为1,n>>1,向右进位1:代码:k=1,t=n;while(n){if(n&1)//......
  • Cash Machine (POJ 1276)(多重背包——二进制优化)
    链接:POJ-1276题意:给你一个最大金额m,现在有n种类型的纸票,这些纸票的个数各不相同,问能够用这些纸票再不超过m的前提下凑成最大的金额是多少?题解:写了01背包直接暴力,结......
  • Subsequence (POJ - 3061)(尺取思想)
    ProblemAsequenceofNpositiveintegers(10<N<100000),eachofthemlessthanorequal10000,andapositiveintegerS(S<100000000)aregiven.W......
  • Til the Cows Come Home ( POJ 2387) (简单最短路 Dijkstra)
    problemBessieisoutinthefieldandwantstogetbacktothebarntogetasmuchsleepaspossiblebeforeFarmerJohnwakesherforthemorningmilking.......
  • POJ--2456 Aggressive cows(二分搜索/最大化最小值)
    记录22:552023-2-9http://poj.org/problem?id=2456reference:《挑战程序设计竞赛(第2版)》3.1.3p142DescriptionFarmerJohnhasbuiltanewlongbarn,withN(2......
  • POJ--3669 Meteor Shower(bfs/稍微变通)
    记录21:372023-2-9http://poj.org/problem?id=reference:《挑战程序设计竞赛(第2版)》第二章练习题索引p135DescriptionBessiehearsthatanextraordinarymeteor......