• [网络流24题-3]软件补丁问题


    软件补丁问题

    “网络流”好题。。。

    为啥这个题会出现在网络流24题里呢QAQ我真的按照网络流想的建了一个2^n个点的2^n*n边的图。。。然后一想网络流再怎么跑都跑不出1e6点数1e6边数的非分层图吧。。。弃疗看题解md怎么是状压+最短路qaq

    就是状压状态然后dp因为1e6的状态每次转移又有100所以最短路更新就好了。

    附代码。

    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<cstdio>
    #include<queue>
    using namespace std;
    
    int f[1048576];
    struct node
    {
    	int x,dis;
    	node(){}
    	node(int _x,int _dis){x=_x,dis=_dis;}
    };
    bool operator <(node a,node b){return a.dis>b.dis;}
    priority_queue<node> que;
    bool vis[1048576];
    int bug[101][2],fix[101][2],n,m,tm[101];
    void dij()
    {
    	memset(f,48,sizeof(f));//printf("%d
    ",f[0]);
    	f[(1<<n)-1]=0;que.push(node((1<<n)-1,0));
    	while(!que.empty())
    	{
    		node cur=que.top();que.pop();
    		if(vis[cur.x])	continue;
    		int x=cur.x;vis[x]=1;//printf("%d %d
    ",x,f[x]);
    		for(int i=1;i<=m;i++)
    		{
    			if((x&bug[i][0])!=bug[i][0])	continue;
    			if((x&bug[i][1])!=0)	continue;
    			int tmp=x&fix[i][0];
    			int to=(x^tmp)|fix[i][1];
    			if(f[to]>f[x]+tm[i])
    				f[to]=f[x]+tm[i],que.push(node(to,f[to]));
    		}
    	}
    }
    char ch[21];
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%d",&tm[i]);
    		scanf("%s",ch);
    		int len=strlen(ch);
    		for(int j=0;j<len;j++)
    		{
    			if(ch[j]=='-')	bug[i][1]|=(1<<j);
    			if(ch[j]=='+')	bug[i][0]|=(1<<j);
    		}
    		scanf("%s",ch);
    		len=strlen(ch);
    		for(int j=0;j<len;j++)
    		{
    			if(ch[j]=='-')	fix[i][0]|=(1<<j);
    			if(ch[j]=='+')	fix[i][1]|=(1<<j);
    		}
    	}
    	dij();
    	printf("%d
    ",f[0]==808464432?0:f[0]);
    	return 0;
    }
  • 相关阅读:
    JS 变量的作用域
    清理网站缓存的几种方法
    C# 将程序添加到启动项 (写入注册表),及从启动项中删除
    EasyUI iconCls
    JQuery Easy Ui dataGrid 数据表格
    datatable转换为json
    Web window.print() 打印
    用js使得输入框input只能输入数字
    隐藏或删除指定的html元素
    使用Asponse.Cell解决Excel科学计数法问题
  • 原文地址:https://www.cnblogs.com/hanyuweining/p/10321963.html
Copyright © 2020-2023  润新知